函數(shù)的副作用
一個函數(shù)除了會返回一個值之外,還會修改函數(shù)以外的狀態(tài)如全局變量等等。
var a = 4;
function change(){
a = 3;
}
change();
console.log(a);//3
promise.all()
Promise.all()會以一個 promises 數(shù)組為輸入攀圈,并且返回一個新的 promise。這個新的 promise 會在數(shù)組中所有的 promises 都成功返回后才返回如绸。他是異步版的 for 循環(huán)。一旦數(shù)組中的 promise 任意一個返回錯誤旭贬,Promise.all() 也會返回錯誤怔接。并且 Promise.all() 會將執(zhí)行結(jié)果組成的數(shù)組返回到下一個函數(shù)。
忘記使用 .catch()
這是另一個常見的錯誤稀轨。單純的堅(jiān)信自己的 promises 會永遠(yuǎn)不出現(xiàn)異常扼脐,很多開發(fā)者會忘記在他們的代碼中添加一個 .catch()。然而不幸的是這也意味著,任何被拋出的異常都會被吃掉瓦侮,并且你無法在 console 中觀察到他們艰赞。這類問題 debug 起來會非常痛苦。
Promise 能被暫停
僅僅因?yàn)槟阋呀?jīng)在一個 then() 函數(shù)中執(zhí)行過代碼肚吏,并不意味著你不能夠暫停 promise 去做其他事情方妖。為了暫停當(dāng)前的 promise,或者要它等待另一個 promise 完成罚攀,只需要簡單地在 then() 函數(shù)中返回另一個 promise党觅。
var = new Promise(/*...*/);
p.then(function(str){
if(!loggedIn){
return new Promise(/*...*/);
}
})
.then(function(str){
alert("Done!");
});
在上面的代碼中,直到新的 promise 的狀態(tài)是 resolved解析后斋泄,alert 才會顯示杯瞻。如果要在已經(jīng)存在的異步代碼中引入更多的依賴,這是一個很便利的方式炫掐。例如魁莉,你發(fā)現(xiàn)用戶會話已經(jīng)超時了,因此募胃,你可能想要在繼續(xù)執(zhí)行后面的代碼之前發(fā)起第二次登錄旗唁。