Promise是一种处理异步编程的形式,其是以"上帝"的视角来组织代码的。
这种视角用代码具体体现出来就是Promise的链式调用
,Promise.prototype.then(fuc1,fuc2)
方法返回的是一个新的Promise对象。这样的链式写法比起嵌套的回调函数写法更符合人的阅读规范。其本质是没有改变的,then里面的函数还是需要某个结果返回之后改变Promise的状态才会被调用。
一个具体的例子:
根据某个名字查出这个人的其他具体信息。现在假设有这样的数据接口,根据名字只能查出为该名的人的身份证号码,然后根据身份证号码能查出这个人的其他具体信息。
let promise = new Promise((resolve, reject) => { //根据name取id $.ajax({ url : 'xxx?name=xxx', success : (res) => { if(res.statusCode === 200){ resolve(res.id); //将id传入回调函数 }else{ reject(New Error('error')); } }, });}).then((id) => { //当上一个promise状态变为resolved之后,调用该函数,根据id获取信息 $.ajax({ url : 'xxx?id='+id, success : (red) => { if(res.statusCode === 200){ console.log(res.data); }else{ throw new Error('error'); } } });},(err) => { throw err;}).catch((err) => { console.log(err);});
上面的代码每一个then中的函数,就相当处理已知的一种结果,这样看上去是一步一步,而不用嵌套写回调函数。
用嵌套回调函数的写法:
$.ajax({ url : 'xxx?name=xxx', success : (res) => { if(res.statusCode === 200){ $.ajax({ url : 'xxx?id='+res.data.id, success : (res) => { if(res.statusCode === 200){ console.log(res.data); }
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。