ES6_身为构造函数的Promise

初识Promise:

JavaScript用Promise来承诺做某事,通常是异步的。当任务完成时,要么履行承诺成功,要么失败。Promise是一个构造函数,因此需要使用new关键字创建。

它使用一个函数作为其参数,这个作为参数的函数内部又有两个函数参数——resolve和reject。这些方法用于确定Promise的结果。

const myPromise = new Promise((resolve, reject) => { });

上面例子中创建的myPromise将永远停留在悬停挂起状态,因为没有给它添加完成承诺的方法。

承诺有三种状态:pending,fulfilled,rejected,即挂起、完成、拒绝。为Promise函数参数里提供的resolve和reject参数用于执行完成承诺的操作。

若要Promise成功则用“resolve”,若要Promise失败则用“reject”,而且需要传参数给它们,如下所示:

const makeServerRequest = new Promise((resolve, reject) => {
  // responseFromServer represents a response from a server
  let responseFromServer;
  if(responseFromServer) {
    resolve('We got the data'); //给了个字符串做实参
  } else {  
    reject('Data not received'); //给了个字符串做实参
  }
});

上面的示例使用字符串作为这些函数的参数,但它实际上可以是任何类型。通常,它可能是一个对象,我们可以将来自这个对象的数据放在我们的网站或其他地方。

用then处理已兑现(resolve)的承诺:

语法:

myPromise.then(result => { }); //‘result’指代给resolve方法传的参数!!

假设有一个在代码中占用未知时间的过程(即异步的过程)时,通常是服务器请求,此时Promise最有用。当我们发出服务器请求时,需要花些时间,在请求完成后,我们通常需要对来自服务器的响应进行处理,这时可以通过‘then’方法实现。我们的承诺在通过resolve完成后,then方法会被立即执行:

const makeServerRequest = new Promise((resolve, reject) => {
  // responseFromServer设置为true表示来自服务器的成功响应
  let responseFromServer = true;
  if(responseFromServer) {
    resolve("We got the data");
  } else {  
    reject("Data not received");
  }
});

makeServerRequest.then(result=>{
  console.log(result);//控制台输出:We got the data
  }
);

用catch处理reject的承诺:

catch是当我们的承诺被拒绝时使用的方法。在Promise的reject方法被调用后会立即执行catch方法。以下是语法:

myPromise.catch(error => { });

例子:

const makeServerRequest = new Promise((resolve, reject) => {
  // responseFromServer设置为false,表示服务器的响应不成功
  let responseFromServer = false;
    
  if(responseFromServer) {
    resolve("We got the data");
  } else {  
    reject("Data not received");
  }
});

//用then处理已兑现(resolve)的承诺
makeServerRequest.then(result => {
  console.log(result);
});

//用catch处理reject的承诺
makeServerRequest.catch(error=>{
  console.log(error);//控制台输出:Data not received
  }
);

。。。

 

 

posted @ 2022-09-16 16:09  枭二熊  阅读(28)  评论(0编辑  收藏  举报