我正在尝试使用 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/