利用 Promise.all([p1, p2]) 去操作兩個promise函數,這兩個函數內部都是用 mongoose 來操作資料庫。
如果 p1 被 reject 了,而 p2 是 resolve。
我的問題是,p2 實際上已經進行了對資料庫的操作,是這樣嗎,還是 promise.all 確保了 p1、p2 都 resolve 才會進行實際的資料庫操作?
感覺是 mongoose 事務性的問題。
为情所困2017-06-15 09:24:14
Promise.all 是當所有給定的可迭代完成時執行 resolve,或任何 promises 失敗時執行 reject。
如果傳遞任何的 promises rejects ,所有的 Promise 的值立即失敗,丟棄所有的其他 promises,如果它們未 resolved。如果傳遞任意的空數組,那麼這個方法就會立刻完成。
var p0 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log(1)
}, 100);
});
var p1 = Promise.resolve(3);
var p2 = 1337;
var p3 = new Promise((resolve, reject) => {
setTimeout(reject, 100, "foo");
});
var p4 = new Promise((resolve, reject) => {
setTimeout(() => {
console.log(2)
}, 100);
});
var p = Promise.all([p0, p1, p2, p3, p4]).then(values => {
console.log(values);
}, values => {
console.log(values) // foo
}); // 1 2
1) promise all中的每個promise都會被執行
2)此時p的狀態就變成rejected