javaScript ES6 之 Promise 简单的事例

在ES6标准中出现了 Promise(承诺) 类似于回调函数

1:创建Promise的实例

//创建实例
var promise = new Promise(function (resolve, reject) {
      if (success) {
          //执行成功
          resolve(data);
      }else {
         //执行失败
          reject(err);
      }
})
//调用then()方法
promise.then(function(value){
    //成功时调用
}, function(value){
    //失败时调用
})
//或者
promist.then(function(value)){
    //成功时调用
}).cathc(function(value){
    //失败时调用
})

2:Promise结合fetch请求的使用

//定义一个方法,请求数据
requestData = (url, postData)=> {
      return new Promise(function (resolve, reject) {
            //fetch也是一个Promise
            fetch(url, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'Content-Encoding': 'identity'  //编码方式
                },
                body: JSON.stringify(postData),
            }).then((response) => response.json())
                .then((responseData)=> {
                    resolve(responseData);
                })
                .catch((err)=> {
                    console.log('err', err);
                    reject(err);
                });
            });
      }
}

//调用上面的方法
this.requestData('http://xxx', {'name': 'jj'})
     .then( res=>{
                console.log('success');
     }).catch( err=>{
            //请求失败
            console.log('flied');

3:Promise.all 的用法

Promise.all([promise1, promise2]).then(function(value){

}).catch(function(value){

})

Promise.all中的参数是一个promise的数组[promise1, promise2]:数组中的操作都完成后才会去执行后面的响应

var req1 = new Promise(function(resolve, reject) { 
     // A mock async action using setTimeout
     setTimeout(function() { resolve('First!'); }, 4000);
});
var req2 = new Promise(function(resolve, reject) { 
     // A mock async action using setTimeout
     setTimeout(function() { reject('Second!'); }, 3000);
});
Promise.all([req1, req2]).then(function(results) {
     console.log('Then: ', one);
}).catch(function(err) {
     console.log('Catch: ', err);
});

// From the console:
// Catch: Second!

当Promise.all中出现一个promise执行失败reject,Promise.all会立刻调用catch

4:Promise.race 的用法

Promise.race([promise1, promise2]).then(function(value){

}).catch(function(value){

})

Promise.race的参数也是一个promise的数组[promise1, promise2],不同于Promise.all,Promise.race的数组中只需要一个promise执行成功,Promise.race就响应接下来的操作

var req1 = new Promise(function(resolve, reject) { 
     // A mock async action using setTimeout
     setTimeout(function() { resolve('First!'); }, 8000);
});
var req2 = new Promise(function(resolve, reject) { 
     // A mock async action using setTimeout
     setTimeout(function() { resolve('Second!'); }, 3000);
});
Promise.race([req1, req2]).then(function(one) {
     console.log('Then: ', one);
}).catch(function(one, two) {
     console.log('Catch: ', one);
});

// From the console:
// Then: Second!

这里req2先执行完成,则Promise.race的then回调被执行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、前言 以往的经验告诉我,在接触自己比较陌生的名词和技术前首先要问三个问题: 它是用来做什么的?它是如何实现的?...
    JRG_Orange阅读 4,645评论 0 50
  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 7,624评论 0 5
  • 1:基本概念 从字面意思上来看,Promise是承诺。它表示一个异步操作的最终状态(完成或失败),以及该异步操作的...
    前白阅读 1,846评论 0 1
  • 目录: 1.概述 2.基本用法2.1 创建Promise2.2 then方法2.3 catch方法2.4 其他创建...
    darjun阅读 12,176评论 2 6
  • 鲁迅先生写 当时的旧中国人民认为父亲对于孩子有绝对的权力和威严。父亲说话无所不可,孩子说话未说先错。但鲁迅先...
    di雨芜阅读 10,097评论 0 1