javascript - nodejs promise 数组,我该怎么做?

标签 javascript node.js

我是异步编程的新手,之前从未做过 promise 队列,所以我不知道如何解决这个问题。

我有一张银行账户表

对于每个银行账户,我都有一个收据列表

Account 111
 - Receipt 001
 - Receipt 002
 - Receipt 003

Account 222
 - Receipt 004
 - Receipt 005
 - Receipt 006

所以我设置了一个 find() 所有银行账户的 promise 。

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

我该怎么办?为每个收据创建一个 promise find()?

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

或者还有第三种选择?

// 
// 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})
    })

最佳答案

这里是你如何做到的:

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);
};

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

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));
            }
        });
    });
}

关于javascript - nodejs promise 数组,我该怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44041184/

相关文章:

javascript - 在 React.js 中有条件地渲染不同元素时传递相同的 props

javascript - Decimal.js tan 的精度问题

javascript - 对如何获取 req.body 感到困惑

node.js - 将 'GridFSBucketWriteStream' 转换为类型 'WritableStream' 不可能吗?

javascript - 在本地托管整个 Squarespace 网站并调用文件

javascript - 播放不重复的随机声音

javascript - 无法在 Backbone 模型上调用自定义方法

javascript - 如何从密码字段中隐藏除一个字符以外的所有字符

javascript - 设置股票代码以使用 setTimeout 而不是 setInterval

MongoDB - 太多连接 w/node.js