JS短路评估是否适用于async/await?
Does JS short-curcuit evaluation work with async/await?
众所周知,在此代码段中,如果 getFirst()
returns 为真值,则 getSecond()
不会被计算:
const result = getFirst() || getSecond();
但是,我很好奇异步函数是否也是如此:
const result = (await getFirstAsync()) || (await getSyncAsync());
它是启动第二个承诺,还是等待第一个承诺先得到解决?
这很容易测试。
function getFirstAsync() {
return new Promise(res => {
console.log("getFirstAsync");
res(true);
});
}
function getSyncAsync() {
return new Promise(res => {
console.log("getSyncAsync");
res(false);
});
}
(async function () {
const result = (await getFirstAsync()) || (await getSyncAsync());
console.log({result});
})();
没有调用第二个函数。
众所周知,在此代码段中,如果 getFirst()
returns 为真值,则 getSecond()
不会被计算:
const result = getFirst() || getSecond();
但是,我很好奇异步函数是否也是如此:
const result = (await getFirstAsync()) || (await getSyncAsync());
它是启动第二个承诺,还是等待第一个承诺先得到解决?
这很容易测试。
function getFirstAsync() {
return new Promise(res => {
console.log("getFirstAsync");
res(true);
});
}
function getSyncAsync() {
return new Promise(res => {
console.log("getSyncAsync");
res(false);
});
}
(async function () {
const result = (await getFirstAsync()) || (await getSyncAsync());
console.log({result});
})();
没有调用第二个函数。