首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nodejs promises数组,我该怎么做呢?

nodejs promises数组,我该怎么做呢?
EN

Stack Overflow用户
提问于 2017-05-18 15:23:23
回答 1查看 14.3K关注 0票数 5

我对异步编程非常陌生,以前从来没有做过承诺队列,所以我不知道如何解决这个问题。

我有一张有银行账户的桌子。

对于每个银行账户,我都有一份收据清单

代码语言:javascript
运行
复制
Account 111
 - Receipt 001
 - Receipt 002
 - Receipt 003

Account 222
 - Receipt 004
 - Receipt 005
 - Receipt 006

因此,我设置了一个查找()所有银行帐户的承诺。

然后我遍历所有的银行账户,找到每个账户的所有收据。

我该怎么办?是否为每个收款查找创建承诺()?

创建一个promises数组?(顺便说一句,你是怎么做到的)

或者还有第三种选择?

代码语言:javascript
运行
复制
// 
// Find all bank accounts
// 
var findBank = new Promise(
    (resolve, reject) => {
    bankTable.find({}
    ,function(err, data) {
        if (!err) {
            resolve(data);
        } else {
            reject(new Error('findBank ERROR : ' + err));
        }
    });
});


// 
// Find the RECEIPTS for each bank account
// 
var findAllReceipts = function(accountArray) {

    for (var i=0; i<accountArray.length; i++) {

        var findReceipt = new Promise(
            (resolve, reject) => {
            receiptTable.find(
                { accountNo: accountArray[i].accountNo } 
            ,function(err, data) {
                if (!err) {
                    resolve(data);
                } else {
                    reject(new Error('findPrice ERROR : ' + err));
                }
            });
        });
    }
}

// 
// Run the promises
// 
findBank
    .then(findAllReceipts)
    .catch(err => {
        console.log("getbankAccountReport ERR: " + err);
        res.json({error:true,err})
    })
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-18 15:42:28

下面是你怎么做的:

代码语言:javascript
运行
复制
let findAllReceipts = function (accountArray) {
    const a = [];

    for (let i = 0; i < accountArray.length; i++) {
        a.push(new Promise((resolve, reject) => {
            receiptTable.find({accountNo: accountArray[i].accountNo}, function (err, data) {
                if (!err) {
                    resolve(data);
                } else {
                    reject(new Error('findPrice ERROR : ' + err));
                }
            });
        }));
    }

    return Promise.all(a);
};

或者以这种方式使用语言的所有功能:

代码语言:javascript
运行
复制
let findAllReceipts = function (accountArray) {
    return Promise.all(accountArray.map(findReceipts));
};

function findReceipts(account) {
    return new Promise((resolve, reject) => {
        receiptTable.find({accountNo: account.accountNo}, function (err, data) {
            if (!err) {
                resolve(data);
            } else {
                reject(new Error('findPrice ERROR : ' + err));
            }
        });
    });
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44041184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档