What's the difference between Async Await and Promise in JavaScript All In One
What's the difference between Async Await and Promise in JavaScript All In One
Async
vsPromise
demos
async function declaration
// named async function declaration
async function asyncFunctionDeclaration(param0, param1, /* …, */ paramN) {
// statements
console.log(`anonymous async function declaration object`)
}
// anonymous async function declaration IIFE
(async function (param0, param1, /* …, */ paramN) {
// statements
console.log(`anonymous async function declaration IIFE`)
return Promise.resolve(`anonymous async function declaration IIFE`)
})().then(msg => {
console.log(`anonymous msg =`, msg)
return msg;
})
// named async function declaration IIFE
(async function iife(param0, param1, /* …, */ paramN) {
// statements
console.log(`named async function declaration IIFE`)
return Promise.resolve(`named async function declaration IIFE`)
})().then(msg => {
console.log(`named msg =`, msg)
return msg;
})
async function expression
// anonymous async function expression class
class AnonymousAsyncFunctionClass {
constructor() {
const add = async function (param0, param1, /* …, */ paramN) {
// statements
console.log(`anonymous async function expression class`)
}
this.add = add;
}
anonym = async function (param0, param1, /* …, */ paramN) {
// statements
}
static test() {
//
}
es5 = function () {
//
}
es6 = () => {
//
}
}
// maned async function expression class
class NamedAsyncFunctionClass {
constructor() {
const add = async function add(param0, param1, /* …, */ paramN) {
// statements
console.log(`named async function expression class`)
}
this.add = add;
}
named = async function named(param0, param1, /* …, */ paramN) {
// statements
}
static test() {
//
}
es5 = function () {
//
}
es6 = () => {
//
}
}
// anonymous async function expression object
const AnonymousAsyncFunctionObject = {
add: async function (param0, param1, /* …, */ paramN) {
// statements
console.log(`anonymous async function expression object`)
},
}
// named async function expression object
const namedAsyncFunctionObject = {
add: async function add(param0, param1, /* …, */ paramN) {
// statements
console.log(`named async function expression object`)
},
}
// anonymous async function expression IIFE
const anonymousIIFE = (async function (param0, param1, /* …, */ paramN) {
// statements
console.log(`anonymous async function expression IIFE`)
return Promise.resolve(`anonymous async function expression IIFE`)
})().then(msg => {
console.log(`anonymous msg =`, msg)
return msg;
})
anonymousIIFE.then(str => console.log(`anonymous str =`, str))
// named async function expression IIFE
const namedIIFE = (async function iife(param0, param1, /* …, */ paramN) {
// statements
console.log(`named async function expression IIFE`)
return Promise.resolve(`named async function expression IIFE`)
})().then(msg => {
console.log(`named msg =`, msg)
return msg;
})
namedIIFE.then(str => console.log(`named str =`, str))
(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!
Promise
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Async
The async function
declaration creates a binding
of a new async function to a given name
.
The await
keyword is permitted within the function body, enabling asynchronous, promise-based behavior to be written in a cleaner style
and avoiding the need to explicitly configure promise chains.
简化 Promise 链式调用的显式配置,写法更优雅
async function
declaration creates a binding
of a new async function to a given name
.The
await
keyword is permitted within the function body, enabling asynchronous, promise-based behavior to be written in a cleaner style
and avoiding the need to explicitly configure promise chains.
function resolveAfter2Seconds() {
return new Promise((resolve) => {
console.log('wait1...');
setTimeout(() => {
console.log('wait3...', typeof resolve);
resolve('resolved');
console.log('wait4...');
}, 2000);
console.log('wait2...');
});
}
// async function declaration ✅
async function asyncCall() {
console.log('calling 0 ');
const result = await resolveAfter2Seconds();
console.log(`result 5`, result);
}
asyncCall();
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
The async function
keywords can be used to define
an async function inside
an expression
.
async function
keywords can be used to define
an async function inside
an expression
.// async function expression
function resolveAfter2Seconds(x) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
// async function expression assigned to a variable
const add = async function (x) {
const a = await resolveAfter2Seconds(20);
const b = await resolveAfter2Seconds(30);
return x + a + b;
};
add(10).then((v) => {
console.log(v); // prints 60 after 4 seconds.
});
// async function expression used as an IIFE
(async function (x) {
const p1 = resolveAfter2Seconds(20);
const p2 = resolveAfter2Seconds(30);
return x + (await p1) + (await p2);
})(10).then((v) => {
console.log(v); // prints 60 after 2 seconds.
});
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/async_function
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function*
Await
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
Zero Width Joiner / 零宽连接器
零宽字符
/Zero Width Space
U+200D
Zero width joiner
<ZWJ>
Placed between characters that would not normally be connected in order to cause the characters to be rendered using their connected form in certain languages.
https://en.wikipedia.org/wiki/Zero-width_joiner
👨👩👦👦
组合 emoji 字符串反转,防止分开
//
https://www.cnblogs.com/xgqfrms/p/17666225.html
Man] [ZWJ] [Woman] [ZWJ] [Boy]
=> 👨👩👦
=> Family: Man, Woman, Boy
https://en.wikipedia.org/wiki/Zero-width_joiner
refs
https://javascript.info/async-await
https://www.codingninjas.com/studio/library/difference-between-promise-and-async-await
©xgqfrms 2012-2021
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/17670168.html
未经授权禁止转载,违者必究!