}
// then的参数不是函数
// 会被忽略,也就是promise穿透
else {
value = detail;
succeeded = true;
}
if (promise._state === PENDING) {
if (hasCallback && succeeded
|| settled === FULFILLED) {
resolve(promise, value);
} else if (failed || settled === REJECTED) {
reject(promise, error);
}
}
}
例如如下例子,结果都是输出foo:
Promise.resolve('foo').then(Promise.resolve('bar')).then(function (result) {
console.log(result);
});
Promise.resolve('foo').then(null).then(function (result) {
console.log(result);
});
拥抱金字塔
promise能够很好的解决金字塔问题,但是有时候我们也是需要适当使用金字塔的,例如我们要同时获取两个promise的结果,但是这两个promise是有关联的,也就是有顺序的,该怎么办?
也许解决方案会是这样,定义一个全局变量,这样在第二个then里面就可以使用两个promise的结果了。
var user;
getUserByName('nolan').then(function (result) {
user = result;
return getUserAccountById(user.id);
}).then(function (userAccount) {
// 好了, "user" 和 "userAccount" 都有了
});
但是这不是最好的方案,此时何不抛弃成见,拥抱金字塔:
getUserByName('nolan').then(function (user) {
return getUserAccountById(user.id).then(function (userAccount) {
// 好了, "user" 和 "userAccount" 都有了
});
});
promise是如此强大而且难以理解,但是抓住实质之后其实并没有想象的那么复杂,这也是为什么我要写下这篇文章。更过关于如何正确使用promise
没有了