promise链式调用时then的返回值
then方法里接受两个函数作为参数,分别是resolve和reject后执行的回调,他返回的是一个新的Promise实例(不是原来那个Promise实例)。
return 值的情况(无return的情况下就返回undefined,也是返回值)
此时返回的Promise会成为Fulfilled的状态,return的值会作为新的promise对象下一个then的回掉函数的参数值。
function test() {
const promise = new Promise((resolve, reject) => {
setTimeout(function() {
resolve('执行成功')
}, 1000)
})
return promise;
}
test().then(aData => {
console.log('aData', aData)
return '9'
}).then(bData => {
console.log('bData', bData)
})输出结果是:
aData 执行成功
bData 9
//当不写return 9时,第二行输出为undefinedthrow error
返回的Promise会成为Rejected的状态,下一步执行catch中的回调函数或者then的第二个回调函数参数。(catch就是then(null, rejection)的别名,即失败时调用的方法)。
return Promise 手动return Promise, 返回的promise状态不一定是resolved了,因此就可以改变下一个then/catch调用的结果了,这个比较常见。
const fs = require("fs")
const path = require("path")
function getFileContent(fileName) {
const promise = new Promise((resolve, reject) => {
const fullFileName = path.resolve(__dirname, "files", fileName)
fs.readFile(fullFileName, (err, data) => {
if(err) {
reject(err)
return
}
resolve(JSON.parse(data.toString()))
})
})
return promise
}
getFileContent('a.json').then(aData => {
console.log('a data', aData)
return getFileContent(aData.next)
}).then(bData => {
console.log('bData', bData)
})输出为:
a data { next: 'b.json', content: '这是a.json' }
bData { next: 'c.json', content: '这是b.json' }此时,第一个then方法return的是一个读取b.json的promise,当读取成功时调用then方法,参数bData就是读取到的值,实现了链式调用。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!