Javascript ожидание завершения асинхронного вызова - PullRequest
0 голосов
/ 11 апреля 2020

Я использую библиотеку, которая вызывает функцию перехвата всякий раз, когда создается новый объект:

// index.js
import Library from 'library';

Library.Hooks.UUID.register(function(context) {

    let newID = generateNewID(context); // async
    return newID;     // The library will use the return value of this hook function as the ID for the newly created object
})

Проблема здесь в том, что функция перехвата является синхронной, в то время как моя generateNewID функция может быть асинхронный вызов. (Для чего бы то ни было, я разрабатываю расширение Chrome, а фоновый скрипт отвечает за генерацию идентификатора, который асинхронно отвечает на скрипт контента через chrome.runtime.sendMessage.)

Очевидное решение - пометить функции перехвата async и await generateNewID(context), но для этого потребуется конвертировать библиотеку для использования механизма перехвата на основе Promise.

Какой более элегантный способ решить эту проблему без переписывания библиотеки?

1 Ответ

0 голосов
/ 11 апреля 2020

для этого потребуется преобразовать библиотеку для использования механизма перехвата на основе Promise.

Да. Невозможно преобразовать библиотеку для поддержки асинхронных перехватчиков (или сделать generateNewID синхронным). Использование обещаний для представления асинхронности будет самым простым подходом для этого.

...