gpt4 book ai didi

javascript - 按顺序运行列表中的函数,直到一个函数解析为止

转载 作者:行者123 更新时间:2023-12-02 15:43:22 25 4
gpt4 key购买 nike

我有返回 promise 的函数列表。我希望它们按顺序运行,直到至少其中一个解决。如果其中之一解决了,那么所有其他的都不应被执行。

算法应如下:

运行第一个函数,如果它解析退出并返回值,否则运行第二个函数,如果它解析退出并返回值,依此类推。

通过 promise 可以实现这一目标吗?我正在使用 Bluebird 库。

所需的伪代码

.run(getUserFromFileById(id))
.run(getUserFromFileByEmail(email))
.run(getUserFromDatabaseById(id))
.run(getUserFromDatabaseByEmail(email))
// ...
.gotResult(function (user) {
console.log('We have user!');
})
.allFailed(function () {
console.log('No joy!');
})

最佳答案

仔细观察,这不是最好的方法

假设用户可以解析下面的所有函数,或者解析为falsey(false、''、 null,未定义,0等)如果他们不能,并且拒绝/抛出找不到用户

getUserFromFileById(id).then(function(user) {
return user || getUserFromFileByEmail(email)
}).then(function(user) {
return user || getUserFromDatabaseById(id)
}).then(function(user) {
return user || getUserFromDatabaseByEmail(email)
}).then(function(user) {
if (user) {
console.log('woot got user');
}
else {
console.log('no user');
throw 'no user';
}
}).catch(function(fail) {
console.log('something went wrong');
});

看了下,这种方式更有意义

这假设您的函数解决一个用户,否则拒绝 promise - 我认为这通常更有意义?没有?

getUserFromFileById(id).catch(function() {
return getUserFromFileByEmail(email);
}).catch(function() {
return getUserFromDatabaseById(id);
}).catch(function() {
return getUserFromDatabaseByEmail(email);
}).then(function(user) {
console.log('woot got user', user);
}, function(fail) {
console.log('something went wrong', fail);
});

关于javascript - 按顺序运行列表中的函数,直到一个函数解析为止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32422887/

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