Promise(三)
then方法
同一个promise的then方法可以调用多次
let fnPromise=() => { return new Promise((resolve,reject) => {resolve('被调用')}) } fnPromise().then(res => {console.log(`第一次${res}`)}) --> 第一次被调用 fnPromise().then(res => {console.log(`第二次${res}`)}) --> 第二次被调用 fnPromise().then(res => {console.log(`第三次${res}`)}) --> 第三次被调用
备注: 只要resolve方法被调用,那么该promise的.then方法都会被调用
then方法的返回值
(1) then方法的返回值是一个promise对象
(2) 如果then函数return的是一个普通值(基础/引用类型),那么整个then函数的返回值是一个新的promise对象,里面的resolve传递的是then函数中return的值,所以可以链式调用
let promiseFn=() => {
return new Promise( (resolve,reject)=>{
resolve()
} )
}
/*
promiseFn().then(res => 3) 这个返回值就是 new Promise( (resolve,reject)=>{ resolve(3) } )
*/
promiseFn().then(res => 3).then(res => {console.log(res)}) --> 3
(3) 如果then函数return的是一个promise对象,依然返回一个新的promise对象,但是resolve中的参数变成了return的promise对象,那么下一个then方法的时机就与return的promise对象有关( 最终变成了resolve中的传参是promise对象的形式 )
let promiseFn=() => {
return new Promise( ()=>{
resolve()
} )
}
/*
promiseFn().then(res => new Promise((resolve)=>{ resolve() })) 这个返回值就是 new Promise( (resolve,reject)=>{ resolve( new Promise((resolve)=>{resolve()}))} )
当resolve的参数是promise对象时,则接下来的操作时机就与resolve中的promise对象有关
*/
let value=promiseFn().then(res => new Promise((resolve)=>{ resolve() })).then(res => {console.log(res)})
备注: 如果返回值是一个对象并且该对象实现了thenable,那么也是相同的理论
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!