javascript - Promise.all 忽略一个 Promise 并调用另一个 Promise 两次

标签 javascript promise

我正在尝试使用 Promise.all 运行几个网络调用,然后在它们全部完成时告诉我。在我的例子中,我有三个 promise 。这些 promise 是从不同的对象返回的,但其中两个具有相同的方法签名。第一个 promise 从未运行,但第二个 promise 被调用两次。如果我更改其中一种方法的名称,它会起作用,但参数的数量似乎并不重要。代码示例:

const test = {};

test.ObjectOne = () => {
  aMethod = (paramOne, paramTwo) => new Promise((resolve, reject) => {
    resolve("Method one");
  });
  
  bMethod = (paramOne, paramTwo) => new Promise((resolve, reject) => {
    resolve("Method one two");
  });

  return this;
};

test.ObjectTwo = () => {
  aMethod = (paramOne, paramTwo) => new Promise((resolve, reject) => {
    resolve("Method two");
  });

  return this;
};

const objectOne = test.ObjectOne();
const objectTwo = test.ObjectTwo();

Promise.all([
  objectOne.aMethod(1, 2),
  objectOne.bMethod(1, 3),
  objectTwo.aMethod(1, 2),
]).then((responses) => {
  console.log(responses);
});

我希望输出是:

["Method one", "Method one two", "Method two"]

但实际输出是:

["Method two", "Method one two", "Method two"]

我看到的问题是什么?

致以诚挚的问候

最佳答案

您没有正确定义对象。这:

test.ObjectTwo = () => {
  aMethod = (paramOne, paramTwo) => new Promise((resolve, reject) => {
    resolve("Method two");
  });

  return this;
};

创建一个全局变量aMethod(这会覆盖之前定义的aMethod)并返回全局对象(window)。

这是可以做到的:

const test = {};

test.ObjectOne = () => ({
    aMethod: (paramOne, paramTwo) => new Promise((resolve, reject) => {
        resolve("Method one");
    }),
    bMethod: (paramOne, paramTwo) => new Promise((resolve, reject) => {
        resolve("Method one two");
    })
});

test.ObjectTwo = () => ({
    aMethod: (paramOne, paramTwo) => new Promise((resolve, reject) => {
        resolve("Method two");
    })
});

const objectOne = test.ObjectOne();
const objectTwo = test.ObjectTwo();

Promise.all([
    objectOne.aMethod(1, 2),
    objectOne.bMethod(1, 3),
    objectTwo.aMethod(1, 2),
]).then((responses) => {
    console.log(responses);
});

关于javascript - Promise.all 忽略一个 Promise 并调用另一个 Promise 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56766683/

相关文章:

amazon-web-services - 如何使用 node.js 和 aws-sdk 从 lambda 访问 aws 参数存储

javascript - 如何返回许多 Promise 并在做其他事情之前等待它们全部

javascript - Angular - 处理 promise 链第一个函数中 $q 中的异常

javascript - 从 Promise.all 返回不会从包装函数返回

javascript - iView UI 下拉项单击

javascript - 如何使用 Express 4 和 Multer 保存文件?

javascript - Angular 冗余数据绑定(bind)?

javascript - js。通过提示检查数组是否具有用户指定的值

javascript - 使用新的数组元素更新 backbone.js 模型

javascript - jquery如何将参数传递给回调函数到管道中