gpt4 book ai didi

javascript - bluebird 中有没有像 async.waterfall 一样工作的方法

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:04 25 4
gpt4 key购买 nike

我正在做这样的事情,其中​​第一个函数依赖于第二个函数。

let findOrg = () => {
return new Promise((resolve, reject) => {
db.organization.find({
where: data
})
.then(org => {
return resolve(org);
}).catch(err => {
reject(err);
});
}); };

let createOrg = org => {
return new Promise((resolve, reject) => {
if (org) {
return resolve(org);
}
db.organization.build(data)
.save()
.then((org) => {
return resolve(org);
}).catch(err => {
reject(err);
});
}); };

findOrg()
.then(org => { //going to find org
return createOrg(org); //then going to make org
}).then(newOrg => {
res.data(mapper.toModel(newOrg)); //then mapping
}).catch(err => {
return res.failure(err);
});

在上述函数 findOrg 和 createOrg 中创建了新的 Promise(ES6)

我的问题是—— 1.我们如何在 Bluebird Promise 库中解决这个问题(如果一个函数依赖于另一个函数,则按顺序),例如

async.waterfall([
function(){},
function(){}],
function(){})
  • 这里创建了 2 个 Promise。有什么办法吗
  • 最佳答案

    您可以使用 Bluebird 的 Promise.reduce或者创建您自己的 waterfall ()函数,例如 this作为替代方案。

    但是:您的代码在使用 promise constructor antipattern 时会产生不必要的开销。 :您可以在不使用 new Promise 的情况下编写它,并且使用 .bind 您还可以避免显式创建内联函数,...如下所示:

    let findOrg = () => db.organization.find({where: data});

    let createOrg = org => org || db.organization.build(data).save();

    findOrg()
    .then(createOrg)
    .then(mapper.toModel.bind(mapper))
    .then(res.data.bind(res))
    .catch(res.failure.bind(res));

    我认为这非常干净。

    关于javascript - bluebird 中有没有像 async.waterfall 一样工作的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43423479/

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