Zac*_*cky 3 javascript async-await ecmascript-2017
我不知道如何将 while 循环中的异步等待功能转换为基于承诺的实现。
repl 显示异步等待版本
https://repl.it/repls/IdealisticPepperyCoding
var dependency = false;
function checkDependency() {
return new Promise(resolve => {
setTimeout(() => {
dependency = true;
return resolve();
}, 1000)
});
}
async function isReady() {
while(!dependency) {
console.log('not loaded');
await checkDependency();
}
console.log('loaded')
}
isReady();Run Code Online (Sandbox Code Playgroud)
如果我对你的理解正确,你想要使用没有异步函数的 Promises 而不是带有异步函数的 Promises ,并且示例checkDependency实际上可能并非dependency = true在所有情况下都设置,所以你想要“循环”。
等效的功能可能看起来像这样,您可以“递归地”调用 check 函数。但是,它实际上不会递归并导致堆栈溢出,因为调用是在异步回调中完成的:
var dependency = false;
function checkDependency() {
return new Promise(resolve => {
setTimeout(() => {
dependency = true;
return resolve();
}, 1000)
});
}
function isReady() {
if (!dependency) {
return checkDependency().then(isReady);
}
return Promise.resolve(true);
}
isReady().then(() => {
console.log('loaded')
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4635 次 |
| 最近记录: |