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()
方法使用它。没有其他捷径。您必须为钩子函数中的异步选项进行适当的架构。你将需要一些重新设计-没有办法避免它。