gpt4 book ai didi

javascript - 我做错了什么?

转载 作者:行者123 更新时间:2023-11-30 15:38:55 25 4
gpt4 key购买 nike

我想了解 Promise.all 的这种行为。

  var checkIfModuleExists = promisify(
function (m, cb){
var doc = {
index: 'app1',
type: 'm1',
id: m.id,
body: { }
};
client.exists(doc ,
function (err, exists) {
cb(err, exists);
});
});

然后我有一个像这样的 promise.all:

var module = [{id: 'aa'}, {id: 'bb'}];
Promise.all( modules.map(function(module){
return checkIfModuleExists(module);
})).then(function(data){
console.log(data);
}).catch(function(err){
console.log(err);
});

当我运行这个 'then' show [false, true]: 这看起来很正常,但我不明白的是,如果我像这样更改我的回调函数 cb({exists: exists, m: m}, err);,我只收到json,没有数组了。我想接收包含 m 的数组以及模块是否存在(类似这样的内容:[{m: true/false}, {m: true/false}])。您能否解释一下这种行为以及如何获取包含每个模块及其状态的数组?谢谢

最佳答案

如评论中所述,您混淆了错误和结果参数。发生的情况是第一个 promise 将被拒绝,导致您的错误处理程序使用您期望的对象执行。

但是,无论如何,这不是您应该使用 promisify 的方式。宁愿做

var clientExists = promisify(client.exists, {context:client});
function checkIfModuleExists(m) {
return clientExists({
index: 'app1',
type: 'm1',
id: m.id,
body: { }
}).then(function(exists) {
return {exists: exists, m: m};
});
}

关于javascript - 我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41115136/

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