封装request时使用到了 Promise,以前只了解了promise的两个方法.then()与 .catch(),完全没研究过这两个参数的问题。

使用自己封装的request来调用接口:

	clickMe() {
				//三个入参参数
				const data = {
					key: '7d06a110e9e20a684e02934549db1d3d',
					type: 'a',
					api: 6
				}
				//发送请求 
				sentence(data).then(res => {
					// this.one_sentence = res
					console.log(res);
				}).catch(res => {
					console.log("erro");
				})
			}

 然后发现入参也正确,但是没有返回值,明明封装的时候success中的if分支正确时最后return过了,最后才发现没有使用resolve()与reject()。

结合上下两行对比参看:

1.resolve(res_data.data) 为返回请求成功后的data数据,以便在上边的then()中能够拿到数据。

2.reject(err)为请求失败后可返回自定义的cath()中的内容。

return new Promise((resolve, reject) => {
		wx.request({
			url: url,
			method: method,
			data,
			header: {
				'Content-Type': 'application/json',

			},
			timeout: 10000,
			success(result) {
				// console.log(result, '成功')
				const res_data = result.data;
				// 	statusCode == 200
				// code==0  就证明成功   返回状态码正常 
				if (result.statusCode == 200 && res_data.code == 0) {
					//执行到 resolve()这个方法的时候,就改变promise的状态为resolved,
					//当状态为 resolved的时候就可以执行.then()
					resolve(res_data.data);
					if (showLoading) {
						// 隐藏加载中
						tips.loaded();
					}
					console.log('成功了');
					return;
				} else {
					tips.toast('数据加载超时,请点击重试')
					//当执行到 reject() 这个方法的时候,就改变 promise的状态为 reject,
					//当promise为reject就可以.catch()这个promise了
					reject(result);
					if (showLoading) {
						// 隐藏加载中
						tips.loaded();
					}
					console.log('失败了');
				}
			},
			// 请求失败后的逻辑
			fail(err) {
				// 隐藏加载中
				tips.loaded();
				tips.toast('请求超时,请重新尝试')
				console.log('可能超时了')
				reject(err);
			}

		})

	})

以下总结知识点转自CSDN博主「Missy Peng」
原文链接:https://blog.csdn.net/Superman_peng/article/details/115444634

Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成 ,又称Fulfilled)和 Rejected(已失败)。

resolve(data)将这个promise标记为resolved,然后进行下一步then((data)=>{//do something}),resolve里的参数就是传入then的数据

执行到 resolve()这个方法的时候,就改变promise的状态为resolved,当状态为 resolved的时候就可以执行.then()

当执行到 reject() 这个方法的时候,就改变 promise的状态为 reject,当promise为reject就可以.catch()这个promise了

这两个方法可以带上参数,用于.then()或者 .catch() 中使用。他们的作用就是 用于改变promise的状态,因为状态改变了,所以才可以执行相应的.then()和 .catch()操作。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。