gpt4 book ai didi

javascript - 使用 async.js 系列识别回调数据

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

我正在使用async.js调用 3 个异步函数,这些函数运行数据库查询并在下面列出的最终函数的 results[] 参数中返回其数据:

async.series([
function(callback) {
datasetA.fetch(sqlQueryA).then(function(data) {
callback(null, data);
});
},
function(callback) {
datasetB.fetch(sqlQueryB).then(function(data) {
callback(null, data);
});
},
function(callback) {
datasetC.fetch(sqlQueryC).then(function(data) {
callback(null, data);
});
}
], function(error, results) {
// Results is array of data containing
// resultA, resultB, resultC.
});

据我所知,所有三个异步函数的结果都在 results[] 参数中。但是识别每个查询结果的最佳方法是什么?我可以想到三种方法:

1. 序数 - resultA 将位于索引 0,resultB 将位于索引 1,resultC 将位于索引2。这显然在 async.js 文档中有所暗示,但没有明确说明。

2.调用async.js之前修改回调参数callback(null, data):


async.series([
function(callback) {
datasetA.fetch(sqlQuery).then(function(data) {
data['query'] = 'A';
callback(null, data);
});
},
function(callback) {
datasetB.fetch(sqlQuery).then(function(data) {
data['query'] = 'B';
callback(null, data);
});
},
function(callback) {
datasetC.fetch(sqlQuery).then(function(data) {
data['query'] = 'C';
callback(null, data);
});
}
], function(error, results) {
for (var i=0; i < results.length; i++) {
// results[i].query will be A, B or C.
}
});

3.检查数据以确定运行的是哪个查询。

我不喜欢 3,因为它将数据库架构与代码紧密结合在一起(我只是为了完整性才将其包含在内)。但我不太确定 1 还是 2 哪个更好。由于 async.js 文档仅暗示结果顺序反射(reflect)了数组中异步函数的顺序,因此我倾向于选项 2。

最重要的是。为什么我也遇到这个问题。也许我错误地使用了 async.js 库?

最佳答案

SO 帖子中的问题 Nodejs async series - pass arguments to next callback提供了答案。

通过为async.series()提供对象而不是数组,每个异步函数都成为一个对象属性 因此有一个 key 。 key 可用于识别结果。

应用到我的示例中,它看起来像:

async.series({
A: function(callback){
datasetA.fetch(sqlQueryA).then(function(data) {
callback(null, data);
});
},
B: function(callback){
datasetB.fetch(sqlQueryB).then(function(data) {
callback(null, data);
});
},
C: function(callback){
datasetC.fetch(sqlQueryC).then(function(data) {
callback(null, data);
});
}
},
function(err, results) {
// results.A
// results.B
// results.C
});

关于javascript - 使用 async.js 系列识别回调数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34294869/

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