【问题标题】:Javascript get callback from function within mapJavascript从地图中的函数获取回调
【发布时间】:2018-09-04 01:04:12
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么只在循环时使用map
  • 我从一个循环开始,然后在大量阅读后变成了一张地图,我不确定为什么我现在有一张地图。循环会解决这个问题吗?
  • getBill 返回一个承诺?
  • getBill 有回调,所以没有承诺?

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


【解决方案1】:

当然你可以使用 Promise.all,你只需要在 getBill 的回调周围加上一个 promise:

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)

【讨论】:

  • 谢谢你,我在const new array = await Promise.all 中得到一个等待的错误,但是如果我删除它似乎可以工作。编辑:哦,是的,我需要把它放在一个异步函数中,而且效果很好:)
猜你喜欢
  • 2016-01-16
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多