我有以下代码块:
new Promise((res, rej) => {
if (checkCondition()) {
res(getValue())
} else {
getValueAsync((result) => {
res(result)
})
}
}).then((value) => {
doStuff(value)
})
我想将其转换为使用async
/ await
,但我无法弄清楚如何做到这一点。我知道当你专门使用promises时,用then()
替换value = await ...
的调用,但是如何使用回调来解决这个问题呢?有可能吗?
答案 0 :(得分:1)
首先,您必须确保自己处于async
功能中。然后它可能是:
async function example() {
let value = (checkCondition() ? getValue() : await getValueAsync());
doStuff(value);
}
await example();
但是,这假设您也可以修改getValueAsync
,使其成为async
函数或使其返回Promise
。假设getValueAsync
必须进行回调,我们无能为力:
async function example() {
let value = (checkCondition()
? getValue()
: await new Promise(res => getValueAsync(res))
);
doStuff(value);
}
await example();
您仍然可以获得不必自己创建完整Promise
链的好处。但是,getValueAsync
需要包含在Promise
中才能与await
一起使用。你应该仔细考虑这种改变是否值得你。例如。如果您掌控大部分代码库和/或您调用的大多数函数已经async
/ return Promise
s。