我已经为此苦苦挣扎了很长时间,但一直没有找到解决这个问题的好方法。

我有一个数组,该数组通过具有回调的导入函数进行映射。我想从回调中获取数据(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)





为了我的一生,在完成下一步之前,我无法采取任何措施等待异步数据,我在哪里出错呢?

最佳答案

确保可以使用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)

10-06 04:26