Javascript 使用Promise.all返回总体结果并将其传递给另一个函数

Javascript 使用Promise.all返回总体结果并将其传递给另一个函数,javascript,promise,Javascript,Promise,进一步问题: 我正在使用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, co

进一步问题:

我正在使用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种不同的环境。我正在这4种环境中搜索设备。有些返回404,有些返回200,有些返回attributeconnected=true,有些返回false

基本上我想在connected=true时触发一些函数,但是如果connected对于环境是false,我将只显示一些环境中的信息,当然,如果我返回非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:在我的案例中,我拒绝了一个或多个承诺,并且承诺。所有承诺都被拒绝。

您需要使用来自
承诺的响应数组。所有承诺如下所示:

// 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.
}));

您需要使用来自
承诺的响应数组。所有响应如下所示:

// 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.
}));

一个括号的位置有问题:

Promise.all(env_array.map(function(env) {
  ...
}).then(function(data) {
  ...
})); // <- Move this up
Promise.all(env_数组.map)(函数(env){
...
}).then(功能(数据){
...

})); // 一个括号的位置有问题:

Promise.all(env_array.map(function(env) {
  ...
}).then(function(data) {
  ...
})); // <- Move this up
Promise.all(env_数组.map)(函数(env){
...
}).then(功能(数据){
...

})); // 您需要
从promise处理程序返回
结果(200/conn.,200/disc.,404),这样您就可以在该回调中将所有结果作为
数据
提供,并可以相应地对其进行操作。您需要
返回
结果(200/conn.,200/disc.,404)从您的承诺处理程序中,这样您就可以在该回调中将所有结果作为
数据
提供,并可以根据它们进行操作Yashika,谢谢,我尝试了类似的操作,但它在上面抛出了一个异常。为我的问题添加了一个示例。我假设
设备\u get\u env
也会返回一个承诺。如果它没有返回承诺,为什么您需要使用
promise.all
@sevenfourkYashika,我基本上是从这个线程中学习的,并在这里创建了另一个问题:。谢谢你的帮助。安史卡,谢谢,我也试过类似的方法,但它在上面给我一个例外。为我的问题添加了一个示例。我假设
设备\u get\u env
也会返回一个承诺。如果它没有返回承诺,为什么您需要使用
promise.all
@sevenfourkYashika,我基本上是从这个线程中学习的,并在这里创建了另一个问题:。谢谢你的帮助,谢谢。但也有一些原因。然后块确实会被执行。我添加了简单的console.log(111),但没有看到它。在我的问题中添加了UPD1代码段。您还应该添加一个
.catch()
处理程序,以查看是否有任何错误。您还可以尝试将本地
.then()
.catch()
处理程序(就像您最初使用的那样)附加到
设备\u get\u env(env)
调用,以查看哪些调用成功/失败。谢谢。但也有一些原因。然后块确实会被执行。我添加了简单的console.log(111),但没有看到它。在我的问题中添加了UPD1代码段。您还应该添加一个
.catch()
处理程序,以查看是否有任何错误。您还可以尝试将本地
.then()
.catch()
处理程序(就像您最初使用的那样)附加到
设备\u get\u env(env)
调用,以查看哪些调用成功/失败。