gpt4 book ai didi

javascript - 确保两个函数依次执行,其中第一个函数内部有异步调用

转载 作者:行者123 更新时间:2023-12-03 08:59:49 25 4
gpt4 key购买 nike

我正在尝试使用 async.js 库来实现以下目标:

  • 我有两个函数:函数a()和函数b()
  • 我希望函数 a() 首先执行直到完成,然后我希望函数 b() 执行直到完成
  • 函数 a() 调用其内部的另一个异步函数

到目前为止,我认为我应该使用异步库中的 series() 函数。这是我到目前为止所拥有的:

async.series([
function(callback) {
var someResult = a();
callback(null, someResult);
},
function(callback) {
var someOtherResult = b();
callback(null, someOtherResult);
}
],
function(err, results) {
console.log('Yay');
});

这与 async.js 文档中概述的代码非常相似,但在 a() 内部还有一些其他异步事件正在进行。

我想等到a()内的所有事件完成后再执行b()。这可能吗?如果我需要修改a()的内容,需要做什么?我知道这类问题违背了节点(以及一般的 js)中应该如何编写的内容,但是 a() 内部进行的异步操作是数据库查询。

如果需要的话,很乐意提供更多信息!

谢谢!

最佳答案

所有异步函数都必须接受回调(或返回 promise )。否则,在异步函数完成后将无法执行某些操作。

所以,因为 a() 是异步的。我假设你的例子:

var someResult = a();

是一个错字。应该是:

a(function(someResult){
// ...
})

没有办法解决这个问题。您无法暂停解释器并等待异步函数完成,因为暂停解释器也会暂停事件循环,导致异步函数永远无法完成。

如果 a() 编写正确,您应该能够执行以下操作:

async.series([
function(callback) {
a(function(someResult){
callback(null, someResult);
});
},
function(callback) {
var someOtherResult = b();
callback(null, someOtherResult);
}
],
function(err, results) {
console.log('Yay');
});

如果没有,请将a()发送回编写它的人并告诉他他做错了。

关于javascript - 确保两个函数依次执行,其中第一个函数内部有异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32343597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com