函数的副作用
一个函数除了会返回一个值之外,还会修改函数以外的状态如全局变量等等。
var a = 4;
function change(){
a = 3;
}
change();
console.log(a);//3
promise.all()
Promise.all()会以一个 promises 数组为输入,并且返回一个新的 promise。这个新的 promise 会在数组中所有的 promises 都成功返回后才返回。他是异步版的 for 循环。一旦数组中的 promise 任意一个返回错误,Promise.all() 也会返回错误。并且 Promise.all() 会将执行结果组成的数组返回到下一个函数。
忘记使用 .catch()
这是另一个常见的错误。单纯的坚信自己的 promises 会永远不出现异常,很多开发者会忘记在他们的代码中添加一个 .catch()。然而不幸的是这也意味着,任何被抛出的异常都会被吃掉,并且你无法在 console 中观察到他们。这类问题 debug 起来会非常痛苦。
Promise 能被暂停
仅仅因为你已经在一个 then() 函数中执行过代码,并不意味着你不能够暂停 promise 去做其他事情。为了暂停当前的 promise,或者要它等待另一个 promise 完成,只需要简单地在 then() 函数中返回另一个 promise。
var = new Promise(/*...*/);
p.then(function(str){
if(!loggedIn){
return new Promise(/*...*/);
}
})
.then(function(str){
alert("Done!");
});
在上面的代码中,直到新的 promise 的状态是 resolved解析后,alert 才会显示。如果要在已经存在的异步代码中引入更多的依赖,这是一个很便利的方式。例如,你发现用户会话已经超时了,因此,你可能想要在继续执行后面的代码之前发起第二次登录。