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)