[聚合文章] Promise

JavaScript 1900-01-01 14 阅读

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);                  }
                

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。