My case:
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...');
代码中有两件事我不明白:
首先:
await waiting();
waiting
是一个同步函数(因为它没有async
关键词)。那么,为什么我可以等待同步函数呢?
第二:
为什么不能done...
完成后等待消息waitingAsync
功能?
主要问题:waitingAsync
是一个异步函数,为什么await
调用时不需要关键字?只是waitingAsync()
代替await waitingAsync()
.
如果我可以等待waitingAsync()
, done...
消息将最后打印。
这不是一个函数,而是一个它返回的值,等待它await
陈述。
async
正常的函数对于调用者来说没有什么不同。async
只是返回一个承诺,而不会在被调用时显式返回它。的结果waitingAsync()
打电话就是一个承诺。的结果waiting()
call 也是一个承诺,所以它不是“同步”的。
根据the spec https://github.com/tc39/ecmascript-asyncawait,承诺和非承诺都可以await
编辑。非承诺将转换为承诺Promise.resolve()
.
console.log('done...')
无法等待,因为它没有在内部调用async
功能。不一定是这样await
ed 因为它不返回承诺但是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...'));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)