私は約束を学んでおり、次のコードを使用して連鎖しようとしています。この中で、.then()
は、最初の実行されます:あなたが見ることができるように、したがって、値が返されていない前に、.then()
が呼び出される。()がPromise.all()の前に実行されています
Promise 2
This will print as second line after the method name, even though its the last line.
Yay! ,,,
This should be before 'Yay!' for i= 1
This should be before 'Yay!' for i= 2
This should be before 'Yay!' for i= 3
This should be before 'Yay!' for i= 4
This should be Awesome: Awesome!
Process finished with exit code 0
:
function myPromise1()
{
console.log("Promise", 1);
return Promise.all([
new Promise((resolve, reject) => {
setTimeout(() => {
console.log("This should be before 'Yay!' for 1");
resolve(1);
}, 3000);
}),
new Promise((resolve, reject) => {
setTimeout(() => {
console.log("This should be before 'Yay!' for 2");
resolve(2);
}, 3000);
})
]);
}
function myPromise2() {
console.log("Promise", 2);
var arr = [1,2,3,4];
return Promise.all(arr.map(i => {
new Promise((resolve, reject) => {
setTimeout(() => {
console.log("This should be before 'Yay!' for i= " + i);
resolve("Success!" + i);
}, 3000)
})
}));
}
function anotherPromise(val) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(val);
}, 3000);
});
}
myPromise2()
.then((msg) => {
console.log("Yay! " + msg);
return anotherPromise("Awesome!");
})
.then((msg2) => {
console.log("This should be Awesome:", msg2);
})
.catch((err) => {
console.log("Uh no, this is a lie --->", err);
});
console.log("This will print as second line after the method name, even though its the last line.");
これが出力されます。
しかし、代わりにmyPromise1()
を呼び出すと、希望の出力が得られます。値も返され、両方の約束の後に.then()
が呼び出されます。
myPromise2()
で問題を解決するにはどうすればよいですか?あなたがここにmap
メソッドから戻るために忘れている
くそーを、1秒で私を倒します! +1 – Carson
私はちょうど私のコーヒーを終えたからです:P – codtex
ありがとう、それはそんなに愚かな間違いだったとは信じられません。私は今でも私にコーヒーを作る必要がある。 –