尝试将 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 承诺,则不需要 await
ed。
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.
我正在尝试将这个 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 承诺,则不需要 await
ed。
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.