确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
Ensure two functions execute one after the other, where the first function has an asynchronous call inside it
我正在尝试使用 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()
内部还有一些其他异步 activity 正在进行。
我想等到 a()
中的所有 activity 都完成后才执行 b()
。这可能吗?如果我需要修改a()
的内容,需要做什么?我知道这类问题违背了应该如何在节点(和一般的 js)中编写东西,但是 a()
内部进行的异步操作是数据库查询。
如果需要,很乐意提供更多信息!
谢谢!
所有异步函数都必须接受回调(或 return 承诺)。否则异步函数完成后无法执行某些操作。
所以,因为 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()
发回给写它的人并告诉他他做错了。
我正在尝试使用 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()
内部还有一些其他异步 activity 正在进行。
我想等到 a()
中的所有 activity 都完成后才执行 b()
。这可能吗?如果我需要修改a()
的内容,需要做什么?我知道这类问题违背了应该如何在节点(和一般的 js)中编写东西,但是 a()
内部进行的异步操作是数据库查询。
如果需要,很乐意提供更多信息!
谢谢!
所有异步函数都必须接受回调(或 return 承诺)。否则异步函数完成后无法执行某些操作。
所以,因为 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()
发回给写它的人并告诉他他做错了。