受益良多,謝謝!
想請問一個問題:
在
funcA().then(funcB).then(funcC);
的寫法,
如果改成
funcA().then(funcB()).then(funcC());
順序是亂掉的
那如果要傳參數進去,該如何寫呢?
function funcX(input) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('花' + input + '秒做完了')
resolve(input);
}, input * 1000)
});
}
funcX(3)
.then(function(){
return funcX(1) ;
})
.then(function(){
return funcX(2) ;
})
照你上面討論的做,是要這樣的效果?
補充一下為何你討論那裡then裡面放funcX(1)不行的原因
因為then裡面參數是要傳callback function
你寫這樣等於是要傳一個funcX(1)的結果進去
這是要問js嗎
看不懂你想問什麼..
function funcA(input) {
return new Promise((resolve, reject) => {
resolve(input + 1);
});
}
function funcB(input) {
return new Promise((resolve, reject) => {
resolve(input + 1);
});
}
function funcC(input) {
return new Promise((resolve, reject) => {
resolve(input + 1);
});
}
funcA(0).then(responseA => funcB(responseA))
.then(responseB => funcC(responseB))
.then(responseC => console.log(responseC));
我的意思是像這樣:
function funcX(input) {
return new Promise((resolve, reject) => {
resolve(input + 1);
});
}
//以下這寫法不會照順序...
funcX(0).then(funcX(1))
.then(funcX(2))
還是不太懂XD
你想要 B->C->A
funcB(0).then(responseB => funcC(responseB))
.then(responseC => funcA(responseC))
.then(responseA => console.log(responseA));
或者 C->B->A
funcC(0).then(responseC => funcB(responseC))
.then(responseB => funcA(responseB))
.then(responseA => console.log(responseA));
都可以啊 這本來就沒有什麼順序
舉例:
function funcX(input) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('花' + input + '秒做完了')
resolve(input);
}, input * 1000)
});
}
//我希望照3-1-2的順序,但這樣寫不行funcX(3).then(funcX(1)).then(funcX(2))
像樓下大大說的
你的問題不完全是then
function funcX(input) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`花${input}秒做完了`);
resolve(input);
}, input * 1000)
});
}
const main = async () => {
await funcX(3);
await funcX(1);
await funcX(2);
}
main();
可以用 async await
可以確保收到promise後在往後執行
對!你先前
funcA(0).then(responseA => funcB(responseA))
.then(responseB => funcC(responseB))
.then(responseC => console.log(responseC));
這樣也是可以的
我後來注意到是你then寫法的問題
上面那個你就當參考吧
不過實務上大多都是用上面那個我想
因為你程式沒寫好,所以他實際執行的方式跟你想像的不太一樣。
你的程式實際上並不是真的用then串在一起等到上一個跑玩才跑下一個,而是後兩段幾乎funcX同時執行。也就是看setTimeout什麼時候執行,結果就是根據那個順序,跟then沒直接關係。