将 while 循环中的异步等待转换为承诺
Convert async await in while loop to promises
我不知道如何将 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();
您不需要 while 循环。
checkDependency().then(() => { console.log('loaded');});
- 你不需要 return
recolve()
直接调用即可。
- 在函数
isReady
中调用函数then
function checkDependency() {
return new Promise(resolve => {
setTimeout(resolve, 1000);
});
}
function isReady() {
console.log('not loaded');
checkDependency().then(() => {
console.log('loaded')
});
}
isReady();
如果我对你的理解正确,你想使用 Promises without async functions 而不是 Promises with async functions,并且示例 checkDependency
实际上可能不会在所有情况下都设置 dependency = true
,因此您想要 "loop."
等效功能可能类似于这样,其中您 "recursively" 调用检查函数。但是,它实际上不会递归并导致堆栈溢出,因为调用是在异步回调中完成的:
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')
});
我不知道如何将 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();
您不需要 while 循环。
checkDependency().then(() => { console.log('loaded');});
- 你不需要 return
recolve()
直接调用即可。 - 在函数
isReady
中调用函数
then
function checkDependency() {
return new Promise(resolve => {
setTimeout(resolve, 1000);
});
}
function isReady() {
console.log('not loaded');
checkDependency().then(() => {
console.log('loaded')
});
}
isReady();
如果我对你的理解正确,你想使用 Promises without async functions 而不是 Promises with async functions,并且示例 checkDependency
实际上可能不会在所有情况下都设置 dependency = true
,因此您想要 "loop."
等效功能可能类似于这样,其中您 "recursively" 调用检查函数。但是,它实际上不会递归并导致堆栈溢出,因为调用是在异步回调中完成的:
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')
});