有没有更好的方法可以将回调函数包装到异步/承诺中?

时间:2019-04-18 14:38:53

标签: node.js promise async-await

我正在使用一个名为“ node-binance-api”的NPM软件包,它确实是不错的lib,但是它使用许多常规的callback()作为代码中的参数。

我的框架是基于Async / Await的,它是可能的或可实现的,因此默认情况下无法在此代码中使用,因为callback()是3中的第二个参数。

这是我使用库存的Promise使其可用于我的Async / Await代码库的实际解决方案。

  promise_get_candlestick(symbol, interval, options = null) {
    return new Promise((resolve, reject) => {
      binance.candlesticks(
        symbol,
        interval,
        (error, ticks) => {
          if (error) {
            reject(error);
          } else {
            resolve(ticks);
          }
        },
        options
      );
    });
  }

但是我知道这不是针对这种情况的最佳解决方案,如果没有任何第三方包,有没有更好的方法来包装它?

4 个答案:

答案 0 :(得分:2)

该库似乎使用经典的回调模式,其中第一个参数是错误,第二个参数是成功的结果。

有一个内置的node.js实用程序来进行转换。

const { promisify } = require('util');
const promise_get_candlestick = promisify(
  binance.candlesticks.bind(binance)
);

答案 1 :(得分:0)

我实际上没有发现任何问题。它可以让你做 await promise_get_candlestick(symbol, interval, options),我想这就是您想要的。

答案 2 :(得分:0)

也许是这样的:

const promise_get_candlestick = promisify(
  (symbol, interval, options = null, callback) =>
    binance.candlesticks(symbol, interval, callback, options)
);

答案 3 :(得分:0)

const foo = async (symbol, interval, options) => {
  try{
    let candles = await binance.candlesticks(symbol, interval, false, options);
    candles = bar(candles);
  }
  catch(err){
    console.log(err);  
  }
}