ES6---Promise对象

前端的一个必学知识之一,Promise对象,是一种用来解决异步编程的方案

特点:
1.对象的状态不受外界影响。 Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。
只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
 
2.一旦状态改变,就不会再变。任何时候都可以得到这个结果。
状态改变只有两种可能:从 pending变为fulfilled和从pending变为rejected。
只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,称为:定型(resolved)
 
3.缺点:无法取消,一旦创建便立即执行;必须设置回调函数,否则promise内部会报错,但是不反应到外部来;处于pending状态无法知道当前异步操作处于刚开始状态还是即将完成的状态。
 
4.基本用法
const promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

promise.then(function(value) {
  // success
}, function(error) {
  // failure
});//then的第二个参数为可选

举几个例子

function timeout(ms) {
  return new Promise((resolve, reject) => {
      //setTImeout的第三个参数,作为resolve函数的参数
    setTimeout(resolve, ms, 'done');
  });
}

//调用函数,值100为setTImeout的时间,若异步状态为fulfilled则返回传递给resolve的值
timeout(100).then((value) => {
  console.log(value);
});
let promise = new Promise(function(resolve, reject) {
  console.log('Promise');
  resolve();
});

promise.then(function() {
  console.log('resolved.');
});

console.log('Hi!');

// Promise
// Hi!
// resolved

/*原因:
*promise在创建后便会立即执行,因此首先打印Promise
*then返回返回异步回调函数,所以执行放在后面,因此Hi提前到第二个执行
*/
5.Promise.prototype.then()
a.其返回的是一个新的promise对象
b.可用链式写法书写,即
getJSON("/posts.json").then(function(json) {
  return json.post;
}).then(function(post) {
  // ...
});
/*
*上面的代码使用then方法,依次指定了两个回调函数。
*第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。
*/
 
---未完待续---
 
备注:以上学习参考至https://es6.ruanyifeng.com/#docs/promise#
 
 
 

猜你喜欢

转载自www.cnblogs.com/kongbaifeiye/p/12609226.html
今日推荐