作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想了解 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/
我是一名优秀的程序员,十分优秀!