我想有条件地跳出这样的循环。
.*
我希望for(let i = 0; i < 3; i++) {
exampleFunction().then(result => {
res = 0 ? i = 3 : null
})
}
至少运行3次,除非它获得所需的结果,在这种情况下,我希望它停止运行。
答案 0 :(得分:2)
exampleFunction
异步运行。使其正常工作的唯一方法是使用async/await
。
const iterateWithExampleFunction = async () => {
for (let i = 0; i < 3; i++) {
console.log('before', i)
await exampleFunction().then(result => {
i = result === 0 ? 3: i;
});
console.log('after', i)
}
};
const exampleFunction = async () => {
return 0;
}
iterateWithExampleFunction();
答案 1 :(得分:0)
您可以对外部作用域进行计数,然后进行异步调用。
let count = 0;
function executeCall() {
exampleFunction().then(result => {
// do something with the result
if (result !== 0 && count !== 3) {
count += 1;
executeCall();
}
});
}
答案 2 :(得分:0)
仅await
个结果就比break
:
(async function() {
for(let i = 0; i < 3; i++) {
const result = await exampleFunction();
if(result === 0) break;
}
})();
答案 3 :(得分:0)
希望这能给您一些想法
async function poll(f, threshold = 3) {
if (!threshold) {
throw new Error("Value not found within configured amount of retries");
}
const result = await f();
if (result >= 0.5) {
return result;
} else {
return await poll(f, threshold - 1);
}
}
async function task() {
return Math.random();
}
poll(task).then(console.log).catch(console.error);