Есть ли лучший способ обернуть функцию обратного вызова в асинхронное / обещание? - PullRequest
0 голосов
/ 18 апреля 2019

Я использую пакет NPM под названием "node-binance-api", это действительно хорошая библиотека, однако она использует много обычных callback () в качестве аргумента в этом коде.

Моя структура основана наAsync / Await максимально возможный или обещающий, который не может использоваться по умолчанию в этом коде, потому что callback () является вторым аргументом из 3.

Вот мое реальное решение, использующее стандартное обещание сделать этопригодный для моей кодовой базы 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
      );
    });
  }

Однако я знаю, что это не лучшее решение для этого случая, есть ли лучший способ обернуть это без какого-либо стороннего пакета?

Ответы [ 3 ]

2 голосов
/ 18 апреля 2019

Похоже, что эта библиотека использует классический шаблон обратного вызова, где первый аргумент является ошибкой, а второй - успешным результатом.

Для преобразования существует встроенная утилита node.js.

const { promisify } = require('util');
const promise_get_candlestick = promisify(
  binance.candlesticks.bind(binance)
);
0 голосов
/ 18 апреля 2019

Может быть что-то в этом роде:

const promise_get_candlestick = promisify(
  (symbol, interval, options = null, callback) =>
    binance.candlesticks(symbol, interval, callback, options)
);
0 голосов
/ 18 апреля 2019

Я на самом деле не вижу в этом ничего плохого. Это позволяет вам делать await promise_get_candlestick(symbol, interval, options) что я думаю, это то, что вы хотите.

...