function retPromise(str) {
return new Promise(resolve=>{
resolve(str);
})
}
console.log(retPromise("first")) // 返回一个Promise对象
retPromise("x").then(str=>{
return retPromise("first")
}).then(str=>{
console.log(str) // 返回"first"
})
为什么在then中return Promise对象,在下一个then中被resolve了?
第二个then的执行链是不是第二个Promise的?
Promise的思想就是把所有同步和异步的代码都视为异步代码,then方法内部会返回一个新的
Promise
(链式调用),then方法的第一个参数onfulfilled
是在前一个Promise
对象的异步调用完成之后调用的这里还是牵扯到
Promise
构造函数内部的一些实现,刚好前几天实现了一个简单的Promise,这里是传送门,希望对您有所帮助我不是大牛-_-我描述下我的观点。
then链式调用会取上一个then的return值做参数,Promise的then函数内部实现为对return的值进行Promise对象化处理,比如基本数据类型会直接通过Promise.resolve(data)返回Promise对象,如果是Promise对象则执行其resolve函数来触发下一个then函数。
你可以把这个then执行链分解成:
你也可以利用setTimeout把function retPromise(str)设置成延迟返回。这样效果更好一点