Promise

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

基本用法

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。下面代码创造了一个Promise实例。

new Promise(function(resolve,reject){
       console.log('Promise');
       resolve();
}).then(function(){
        console.log('resolved.');
})
console.log('Hi!');

// Promise
// Hi!
// resolved

错误捕获

promise.then(function(data) {
          // 成功时执行的代码块
  }, function(err) {
         // 失败时执行的代码块
  });
// 等同于
promise.then(function(data) { //cb
          // 成功时执行的代码块
  }).catch(function(err) {
         // 失败时执行的代码块
  });

其他promise方法

promise.all()【返回一个 Promise实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败原因的是第一个失败 promise 的结果

Promise.all([p1,p2,p3]).then(res=>{
            console.log(res)
     })

promise.race()【返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。】

var promise1 = new Promise(function(resolve, reject) {
         setTimeout(resolve, 500, 'one');
});

var promise2 = new Promise(function(resolve, reject) {
        setTimeout(resolve, 100, 'two');
});

Promise.race([promise1, promise2]).then(function(value) {
        console.log(value);
});

// two

async/awite

ES2017 (ES7)标准引入了 async 函数,使得异步操作变得更加方便。async 函数是什么?一句话,它就是 Generator 函数的语法糖。使异步代码变成同步执行。

基本用法

async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

function timeout(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

async function asyncPrint(value, ms) {
  await timeout(ms);
  console.log(value);
}

asyncPrint('hello world', 50);
上面代码指定 50 毫秒以后,输出hello world。

返回Promise对象

async function f() {
  return 'hello world';
}

f().then(v => console.log(v))
// "hello world"

注意点:

  1. async函数和普通函数一样按顺序执行,同时,在执行到await语句时,返回一个Promise对象

  2. await可以理解为将async函数挂起,直到等待的Promise被fulfill或者reject,再继续执行之后的代码

  3. async函数的返回值和普通Promise没有区别

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

推荐阅读更多精彩内容

  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 12,774评论 1 56
  • 一. Callback (回调函数) 1.定义:把函数当作变量传到另一个函数里,传进去之后执行甚至返回等待之后的...
    hutn阅读 5,430评论 0 2
  • 目录:Promise 的含义基本用法Promise.prototype.then()Promise.prototy...
    BluesCurry阅读 5,326评论 0 8
  • 单线程 JavaScript是一门单线程的语言,被广泛应用于浏览器和页面DOM元素交互,自从Node.js出现后,...
    JunChow520阅读 4,166评论 0 3
  • 一、Promise的含义 Promise在JavaScript语言中早有实现,ES6将其写进了语言标准,统一了用法...
    Alex灌汤猫阅读 4,247评论 0 2