xpt*_*xpt 2 javascript node.js promise async-await
我是 JS/nodejs 的新手,所以如果我不能提出切中要害的问题,请原谅我。
所以基本上,如果我有两个异步函数,
async function init() {...}
async function main() {...}
Run Code Online (Sandbox Code Playgroud)
如何确保在 init() 完成异步请求后调用 main()?
具体来说,我想利用模块 https://www.npmjs.com/package/hot-import
而在其页面上,有一个示例代码:
async function main() {
const MODULE_CODE_42 = 'module.exports = () => 42'
const MODULE_CODE_17 = 'module.exports.default = () => 17'
const MODULE_FILE = path.join(__dirname, 't.js')
fs.writeFileSync(MODULE_FILE, MODULE_CODE_42)
const hotMod = await hotImport(MODULE_FILE)
. . .
Run Code Online (Sandbox Code Playgroud)
示例代码按原样工作,但是当我将其放入事件回调函数时,事情开始出现问题——它适用于第一个事件触发器,但不适用于第二个。
我认为问题不是 constant hotMod,而是导致问题的异步函数中的await hotImport 。因此,我试图定义为全局变量并在调用之前在函数中执行。但到目前为止我还没有,因为我对 JS/nodejs 还很陌生。hotModhotMod = await hotImport(MODULE_FILE)async init() main()
请帮忙。谢谢。
使用 aysnc 等待
async function myFlow(){
.....
await init();
main();
....
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,只有在 init 被解析()时才会调用 main()。我希望这可以帮助你。
异步函数返回承诺。所以你应该能够一个接一个地调用then()
init()
.then(() => main())
Run Code Online (Sandbox Code Playgroud)
如果init返回某些内容(例如hotMod),您可以将其作为 then 回调的参数。
init()
.then((init_return) => {
// do something with init_return
return main()
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5432 次 |
| 最近记录: |