Javascript从map中的函数获取回调

时间:2018-03-25 23:32:35

标签: javascript node.js callback promise async-await

我一直在努力解决这个问题,而且我们已经找不到解决这个问题的好办法了。

我有一个数组,我通过一个回调的导入函数进行映射。我想从回调中获取数据(JSON),操纵它,输出它并通过另一个函数运行它。

因为node_module qbo.getBill函数有一个回调,我不认为我可以运行promise或async \ await,所以我添加getBill函数后我没有成功

这是我的代码/我想做的事情:



var QuickBooks = require('node-quickbooks') 
        var qbo = new QuickBooks(...)

        let BillIds = [....]
        let newArray =[]

        let mapData = BillIds.map(val => {
            qbo.getBill(val, function (err, Billid) {
                newArray.push = {
                  id: Billid.Id,
                  balance: Billid.Balance
                }
            })
        })
        
        
        
        DoAThingWithAsyncronousData(newArray)




对于我的生活,我无法在完成下一步之前等待异步数据,我哪里出错了?

1 个答案:

答案 0 :(得分:1)

当然你可以使用Promise.all,你只需要对getBill的回调做出承诺:

const newArray = await Promise.all(
  BillIds.map(val => new Promise((resolve, reject) => {
    qbo.getBill(val, (err, Billid) => {
      const billObj = {
        id: Billid.Id,
        balance: Billid.Balance
      }
      resolve(billObj)
    });
  }))
);

DoAThingWithAsyncronousData(newArray)