如何用等待语句等待if-else语句



下面的函数在if-else中有wait语句。

如果我执行此函数,它将返回[]一个空数组,因为它没有等待If-else语句完成。

如何等待if-else语句结束?

const [imageArray, setImageArray] = useState();
const [loading, setLoading] = useState(true);
let a = 1
var array = [];
if(a === 2){
array = await getArray();
} else if (a === 3){
array = await getArray2();
}
setImageArray(array);
setLoading(false);
render(
{(!loading) ? (
......

如果我执行此函数,它将返回[]一个空数组,因为它没有等待If-else语句完成。

不,不会。这就是async/await语法的要点,它允许您使用熟悉的流控制结构编写异步代码。此代码出现的async函数将返回一个promise,该promise的解决将取决于函数逻辑中发生的情况。您的代码将等待来自getArraygetArray2的承诺结算,或者如果a不是12,则将立即继续,因为没有什么可等待的。

如何等待if-else语句结束?

您不必这样做,在if/else块的主体中有await就足够了。在getArraygetArray2的承诺得到解决之前,函数的逻辑不会继续,或者(如果a不是12(它不会等待,因为没有什么可等待的。

这里有一个例子:

function delay(ms, value) {
return new Promise(resolve => {
setTimeout(resolve, ms, value);
});
}
async function getArray() {
await delay(400);
return [1];
}
async function getArray2() {
await delay(400);
return [2];
}
async function example(a) {
let array;
if (a === 1) {
console.log("Calling `getArray`");
array = await getArray();
} else if (a === 2) {
console.log("Calling `getArray2`");
array = await getArray2();
} else {
console.log("Not calling anything, a is not 1 or 2");
array = [3];
}
// Notice that this doesn't happen until/unless
// `getArray` or `getArray2`'s promise is fulfilled
console.log(`array is: ${JSON.stringify(array)}`);
}
const value = Math.floor(Math.random() * 3) + 1;
console.log(`Calling `example(${value})`...`);
example(value)
.then(() => {
console.log("`example` function's promise was fulfilled");
})
.catch(() => {
// (No code above rejects, but...)
console.log("`example` function's promise was rejected");
});
Run the snippet multiple times to see all three conditions occur (a = 1, 2, and 3).

最新更新