Tân*_*Tân 3 javascript asynchronous ecmascript-2017
我的情况:
let waiting = function () {
return new Promise(resolve => {
console.log('awaiting...');
setTimeout(function () {
resolve();
}, 1000)
});
};
let waitingAsync = async function () {
console.log('start...');
await waiting();
console.log('stop...');
};
waitingAsync();
console.log('done...');Run Code Online (Sandbox Code Playgroud)
代码中有两件事我不明白:
首先:
await waiting();
Run Code Online (Sandbox Code Playgroud)
waiting是一个同步函数(因为它没有async关键字)。那么,为什么我可以等待一个同步函数呢?
第二:
为什么done...完成waitingAsync功能后不能等待消息?
主要问题:waitingAsync是一个异步函数,为什么await调用它时不需要关键字?只是waitingAsync()代替await waitingAsync().
如果我可以 await waitingAsync(),done...消息将最后打印。
这不是一个函数,而是一个它返回的值,它用await语句等待。
async和正常功能与调用者没有什么不同。async在被调用时只返回一个承诺而不明确返回它。waitingAsync()调用的结果是一个承诺。waiting()call的结果也是一个 promise,所以它不是“同步的”。
根据规范,promises 和 non-promises 都可以被await编辑。非承诺被转换为承诺Promise.resolve()。
console.log('done...')不能等待,因为它不在async函数内部调用。并且它不必被awaited 因为它不返回一个 promise 而是undefined. await在async函数中它是可能的。这些await用法是相同的,同样无用,它们所做的只是 1 个滴答延迟:
async function ... {
...
await console.log('done...');
}
async function ... {
...
console.log('done...');
await undefined;
}
async function ... {
...
await Promise.resolve(console.log('done...'));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3639 次 |
| 最近记录: |