此处有进一步的问题:Promise.all(): Return a result after all Promises are resolved and/or rejected
我正在使用Promise.all迭代:
// var env_array = ["env1", "env2", "env3", "env4"];
Promise.all(env_array.map(function(env) {
return device_get_env(env).then(function(data) {
var connected = data.data.connected;
console.log(env, connected);
});
}).then(function(data) {
console.log(data);
}));
我有4种不同的环境。我正在所有这四种环境中搜索设备。有些可能会返回404,有些会返回200,有些会返回属性connect = true,有些则为false。
基本上我想在连接= true时触发某些功能,但如果环境连接为假,我只会显示某些环境中的信息,当然我是否会返回非404。
因此我认为我可能会收集所有结果,然后根据结果触发我的功能,而不是在迭代后立即触发功能。
你能建议,我应该走哪条路?谢谢。
UPD :我试过这个:
Promise.all(env_array.map(function(env) {
return device_get_env(env);
}).then(function(data) {
console.log(data);
}));
它抛出:
TypeError: env_array.map(function(env) {
return device_get_env(env);
}).then is not a function. (In 'env_array.map(function(env) {
return device_get_env(env);
}).then(function(data) {
console.log(data);
})', 'env_array.map(function(env) {
return device_get_env(env);
}).then' is undefined)
UPD1 ,出于某种原因。然后阻止不执行,因为我在控制台中看不到111:
Promise.all(env_array.map(function(env) {
return device_get_env(env);
})).then(function(data) {
console.log(111);
});
UPD2 :对于我的情况,我拒绝了一个或多个承诺,并且Promise.all被拒绝。
答案 0 :(得分:1)
您需要使用Promises.all
的响应数组,如下所示:
// var env_array = ["env1", "env2", "env3", "env4"];
Promise.all(env_array.map(function(env) {
return device_get_env(env);
}) // Promise.all["PromiseEnv1", "PromiseEnv2", "PromiseEnv3", "PromiseEnv4"]
.then(function(data) {
console.log(data); // ["404", {connected: true}, {connected: false}, "404"];
// Now you can can process above array as you need.
}));
答案 1 :(得分:1)
您对一个括号的位置有疑问:
Promise.all(env_array.map(function(env) {
...
}).then(function(data) {
...
})); // <- Move this up
应该是:
Promise.all(env_array.map(function(env) {
...
})).then(function(data) { // <- here
...
});