promise链式调用时then的返回值

更新日期: 2019-09-25 阅读: 5.7k 标签: 链式

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时,第二行输出为undefined


throw 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就是读取到的值,实现了链式调用。


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/5542

javascript 链式写法,如何实现js方法的链式调用

javascript方法的链式调用,使用它能让代码很简洁,易懂,而且最大的好处就是避免多次重复使用一个对象变量。 包括工厂模式的写法,Promise异步链式 等做说明。

PHP实现链式操作的三种方法详解

这篇文章主要介绍了PHP实现链式操作的三种方法,结合实例形式分析了php链式操作的相关实现技巧与使用注意事项,需要的朋友可以参考下,本文实例讲述了PHP实现链式操作的三种方法。分享给大家供大家参考,具体如下:

javascript 链式写法

熟悉Jquery的同学都知道,它对dom的操作基本都链式调用的写法,这种给人感觉就是很简洁,易懂,而且最大的好处就是避免多次重复使用一个对象变量。链式操作是在对象的方法中通过最后返回自身对象(return this),返回的对象就可以继续调用它里面的方法

js简单实现链式调用

链式调用原理就是作用域链;实现需要做的工作;对象方法的处理 (操作方法),处理完成返回对象的引用(操作对象),第2步链式实现的方式:

Js链式取值方式总汇

对于对象的属性存在性检测一直是我们判断条件几乎每天遇到的,但是你是否又在具有‘坏味道’ 代码很绝望,现在我们提供几种处理‘坏味道’ 对象链式取值方式

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!