我学习ES6的时候,B站老师没讲then链式调用,是怎么调用的,最后在MDN中看懂了
本文章代码是从MDN中转载过来的,内容附加我的个人理解,文章末尾,分享MDN文章链接
// 链式调用
p.then(value => {
}).then(value => {
});
由于 then方法 会返回 promise,它们可以被链式调用时,又可以称之为复合操作
你可以传递一个匿名函数给
then
,并且,如果它返回一个Promise
,一个等价的Promise
将暴露给后续的方法链。(后面使用setTimout
函数来模拟异步代码操作。)意思就是:
then里面有包含匿名函数,而函数里面
- 如果有Promise 对象,那么promise里面的状态就会暴露在下一个then中,比如 resolve('表哥,我又来了喔!') 的内容就会暴露给下一个then方法链。
- 如果没有promise 对象,内容传递到这里后,再在这个then 里面进行处理,可以打印出处理的结果,但是,并不会将处理后的结果暴露在下一个then方法链中。
Promise.resolve("foo")
// 1. 接收 "foo" 并与 "bar" 拼接,并将其结果做为下一个 resolve 返回。
.then(function(string) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
string += 'bar';
resolve(string);
}, 1);
});
})
// 2. 接收 "foobar", 放入一个异步函数中处理该字符串
// 并将其打印到控制台中, 但是不将处理后的字符串返回到下一个。
.then(function(string) {
setTimeout(function() {
string += 'baz';
console.log(string);
}, 1)
return string;
})