Как ждать функцию, которая вызывает другую функцию обратного вызова - JavaScript - PullRequest
0 голосов
/ 18 октября 2019

Я использую стороннюю библиотечную функцию, которая использует callback. Я бы хотел, чтобы вместо этого использовалось Promise. Кажется, я не могу понять, как я могу ждать, пока произойдет обратный вызов, прежде чем я смогу вернуть что-то из функции.

// this is the third party function that I cannot change
const callbackFunction = (arg: string, callback: (err?: string, result?: string) => void) => {
    console.log("do something else");
    return callback(undefined, "some data");
}

Я хочу написать функцию, которая получает result для меня. Это то, что я пока имею, но не похоже на правильный подход.

Это моя функция, которая должна возвращать result

const someFunction = (): string | undefined => {
    console.log("do something async"); // async/await
    callbackFunction("something", (err, result) => {
        return result || undefined;
    });

    // how to return `result` from here?
}

1 Ответ

0 голосов
/ 18 октября 2019

Хотелось бы, чтобы вместо этого использовался Promise.

Вы можете взять API на основе обратного вызова и обернуть его в обещание, используя конструктор new Promise.

const someFunction = (): Promise<string | undefined> => {
  return new Promise((resolve, reject) => {
    console.log('do something');
    callbackFunction('something', (err, result) => {
      if (err) 
        reject(err);
      else 
        resolve(result || undefined);
    });
  });
}
...