尝试将 Braintree 嵌套回调转换为 NodeJS async/await 语法

Trying to convert a Braintree nested callback into NodeJS async/await syntax

我正在尝试将这个 Braintree 嵌套回调转换为 async/await:

  var stream = gateway.transaction.search(function (search) {
    search.customerId().is(braintreeCustomerId);
  }, function (err, response) {
    response.each(function (err, transaction) {
      console.log(transaction);
    });
  });

我试过这种方法,但得到 undefined 响应输出:

  await gateway.transaction.search(async (search) => {
    const response = await search.customerId().is(braintreeCustomerId);
    console.log(response)
  })

我做错了什么?

async 函数通常不应与不知道承诺的 API 一起使用,因为这会导致未链接的失控承诺。

如果gateway.transaction.search不支持promises,需要promisified:

const search = util.promisify(gateway.transaction.search).bind(gateway.transaction);

const searchResult = await search();
const response = searchResult.customerId().is(braintreeCustomerId);

如果 searchResult.customerId().is(braintreeCustomerId) 不是 return 承诺,则不需要 awaited。

promise 只会帮助你完成最终的异步结果回调,而不是 predicate。

const response = await gateway.transaction.search(function (search) {
  search.customerId().is(braintreeCustomerId);
});
response.each(function (err, transaction) {
  console.log(transaction);
});

这假定 transaction.search 已经支持承诺。如果没有,您将 need to promisify it.