gpt4 book ai didi

javascript - 将 async/await 样式转换为传统的 .then 样式

转载 作者:行者123 更新时间:2023-11-30 20:26:27 25 4
gpt4 key购买 nike

考虑下面的代码示例,我将尝试通过两种方式获得结果,如果 methodA 没有给我预期的结果,我将尝试 methodB

function methodA () {
console.log('called A');
return Promise.resolve('not result');
}

function methodB () {
console.log('called B');
return Promise.resolve('result');
}

function isValid (result) {
return result === 'result';
}

async function getResult () {
let result = await methodA();
if (!isValid(result)) result = await methodB();
console.log('result', result);
}

我想使用传统的 .then 风格来处理异步函数。

function getResult () {
return methodA()
.then((result) => {
if (isValid(result)) return result;
return methodB();
})
.then((result) => {
console.log('result', result);
});
}

我可能会在未来添加更多方法(methodCmethodD...)。

有没有办法让 getResult 看起来更干净?

JSFiddle

最佳答案

您可以一个接一个地(按顺序)解决 promise :

function methodA() {
console.log('called A');
return Promise.resolve('not result');
}

function methodB() {
console.log('called B');
return Promise.resolve('result');
}

function methodC() {
console.log('called С');
return Promise.resolve('not result');
}

function getResult() {
let methods = [methodA, methodB, methodC];

let op = Promise.resolve();
methods.forEach(m => op = op.then(result => result == 'result' ? null : m()));

return op.then(() => console.log('result'));
}

getResult();

在上面的例子中,只有 methodAmethodB 会被调用。

关于javascript - 将 async/await 样式转换为传统的 .then 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50862435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com