Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript等待异步调用完成_Javascript_Asynchronous_Google Chrome Extension_Promise_Async Await - Fatal编程技术网

Javascript等待异步调用完成

Javascript等待异步调用完成,javascript,asynchronous,google-chrome-extension,promise,async-await,Javascript,Asynchronous,Google Chrome Extension,Promise,Async Await,我使用的库在创建新对象时调用钩子函数: // 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

我使用的库在创建新对象时调用钩子函数:

// 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扩展,后台脚本负责生成ID,该ID通过
Chrome.runtime.sendMessage
异步响应内容脚本)

一个明显的解决方案是标记钩子函数
async
wait generateNewID(context)
,但这需要将库转换为使用基于承诺的钩子机制

在不大量重写库的情况下,解决这个问题的更优雅的方法是什么

这需要将库转换为使用基于承诺的钩子机制


对。无法将库转换为支持异步挂钩(或使
generateNewID
synchronous)。使用承诺来表示异步将是最简单的方法。

您可以使用回调、承诺或事件来回传异步检索的值。选择一个并使
generateNewID()
.register()
方法使用它。没有其他捷径。您必须为钩子函数中的异步选项进行适当的架构。你将需要一些重新设计-没有办法避免它。