gpt4 book ai didi

javascript - 从方法返回的 Promise 未定义

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

我有一个接受函数作为回调参数的方法。外部方法和回调函数都返回我收集到数组的 promise ,等待它们被 Q.all 解析。

function eval() {
var colReadPromisses = [];

config.mongodb.colls.forEach(function (collName) {

var outer = mongo.readCollection(collName,
function (jsonData) {
var prom = es.pushItemToES(jsonData, esIndexName, collName, i);
colReadPromisses.push(prom);
});
colReadPromisses.push(outer);
});

return Q.all(colReadPromisses);
}

现在,内部回调方法被调用了很多次,并且需要一些时间来处理所有这些方法。在处理它们时,从“readCollection”方法返回的 promise 变得“未定义”,导致“Q.all(colReadPromisses);”解决。

所以我的两个问题是为什么nodejs会失去对“readCollection”方法返回的 promise 的跟踪以及如何避免这种情况?

感谢您的回复!

最佳答案

我假设您想在返回的 Promise 中获取所有 readCollection 和 PushItemToES 的结果

function eval() {

return Q.all(config.mongodb.colls.map(function (collName) {

var pushPromisses = [mongo.readCollection(collName, function (jsonData) {
pushPromisses.push(es.pushItemToES(jsonData, esIndexName, collName, i));
})];

return pushPromisses[0] // once the outer promise resolves
.then(function() {
return Q.all(pushPromisses); // wait for them all (including the outer)
});

}));
}

返回的 Promise 解析后,将解析为二维数组

  • [0][0]将是 mongo.readCollection(colls[0]) 的结果
  • [0][1..n]将是每个 pushItemToES 的结果来自readCollection(colls[0])
  • [1][0] will be the result of the mongo.readCollection(colls[1])`
  • [1][1..n]将是每个 pushItemToES 的结果来自readCollection(colls[1])

等等

如果你不需要 mongo.readCollection 的结果在返回的 promise 中

function eval() {

return Q.all(config.mongodb.colls.map(function (collName) {

var pushPromisses = [];

return mongo.readCollection(collName, function (jsonData) {
pushPromisses.push(es.pushItemToES(jsonData, esIndexName, collName, i));
}).then(function() {
return Q.all(pushPromisses);
});

}));
}

在这种情况下,返回的 Promise 仍然是二维的,但只有 pushItemToES 的结果。

  • [0][0..n]将是每个 pushItemToES 的结果来自readCollection(colls[0])
  • [1][0..n]将是每个 pushItemToES 的结果来自readCollection(colls[1])

我在已解决的 promise 中看不到任何围绕二维数组的方法 - 因为 es.pushItemToES不被称为“已知”(至少不是提前)次数

关于javascript - 从方法返回的 Promise 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35479224/

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