当前位置: 首页 > 知识库问答 >
问题:

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

宰父远
2023-03-14

这里的进一步问题:promissione.all():在解决和/或拒绝所有承诺后返回一个结果

我正在使用Promissione.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,有些返回属性connected=true,有些返回false。

基本上,我想在connected=true时触发一些函数,但如果connected对于环境为false,我将只显示一些环境的信息,当然,如果我将返回non404。

因此,我认为我可能会收集所有的结果,然后根据这些结果触发我的html" target="_blank">函数,而不是在迭代后立即触发函数。

你能建议一下,我该走哪条路吗?多谢了。

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:就我的情况而言,我的一个或多个承诺被拒绝了,而承诺.全部被拒绝了。

共有2个答案

越国源
2023-03-14

您对一个括号的位置有问题:

Promise.all(env_array.map(function(env) {
  ...
}).then(function(data) {
  ...
})); // <- Move this up

应该是:

Promise.all(env_array.map(function(env) {
  ...
})).then(function(data) { // <- here
  ...
});
柯甫
2023-03-14

您需要使用来自承诺.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.
}));
 类似资料:
  • 问题内容: 有没有办法在Redis中将一个函数的返回值传递给另一个函数?当然,如果您使用的是语言包装器(如Ruby),这很容易-但是从CLI来看又如何呢? 例如这样的东西,bash风格 或类似的东西 将返回键列表,但是我不知道如何获取这些键的所有值。 有什么想法吗? 问题答案: 在CLI中,您只需要让Shell完成其工作即可。 请注意,由于其线性复杂性,因此不应在应用程序中使用keys命令。

  • 问题内容: 我尝试了以下失败的尝试: 在函数a中,我可以使用arguments关键字来访问参数数组,而在函数b中,这些参数将丢失。有没有办法像我尝试的那样将参数传递给另一个javascript函数? 问题答案: 用于对in函数具有相同的访问权,如下所示:

  • 问题内容: 是否可以通过某种方式将一个函数的范围传递给另一个函数? 例如, 我宁愿直接访问变量,即,不使用类似或的任何东西,而只是直接使用或。 问题答案: 真正访问函数私有范围的唯一方法是在函数内部声明,这样就形成了一个闭包,允许隐式访问变量。 这是您的一些选择。 直接访问 在内部声明。 如果您不想在中使用,则可以将它们都放在更大的容器范围内: 这些是您可以直接使用的变量而无需任何额外的代码来移动

  • 我有一个异步方法,它返回。 我将公开一个公共方法,该方法必须返回基于类a的数据的。此方法的调用方不应该知道classA: 到目前为止,一切都按预期进行。 现在,我喜欢在有ObjectB结果并调用void方法之后执行异步操作,我喜欢以某种方式将其传递给ObjectA: 但是似乎没有在中定义。 有没有办法做这样的手术?

  • 问题内容: 我是ajax和回调函数的新手,如果我弄错了所有概念,请原谅我。 问题: 我可以将 回调 函数作为参数发送给将执行该回调的另一个函数吗? 问题答案: 对。函数引用与任何其他对象引用一样,您可以将它们传递到您的内心。 这是一个更具体的示例: 您还可以传递以下参数:

  • 问题内容: 我想将传递给function()的所有参数作为参数传递给内部的另一个function(), 这可以在被调用过程中完成并将它们传递给,但是还有另一种方法吗? 本来 但是如果我的func1签名是 我如何将它们全部发送到func2,而不使用 有没有一种方法像在javascript中? 问题答案: 显式比隐式更好, 但是如果您真的不想键入一些字符,请执行以下操作: 都是局部变量,因此您不能在调