Promise对象

Posted jing_he

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Promise对象相关的知识,希望对你有一定的参考价值。

promise是异步编程的一种解决方案,promise对象代表一个异步操作。

promise对象有三种状态:pending(进行中),resolved(已完成)和rejected(已失败),只有异步操作的结果可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

Promise对象是一个构造函数,用来生成Promise实例。

var promise = new Promise(function(resolve, reject) {
  // ... some code

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



Promise构造函数接收2个函数参数:

1.resolve函数:将promise对象从pending状态变为resolved。在异步操作成功时调用,并将异步调用的结果作为参数传递出去。

2.reject函数:将promise对象从pending状态变为rejected状态。在异步操作失败时调用,并将异步操作报出的错误传递出去。

Promise实例生成之后,可以使用then方法分别指定Resolved状态和Rejected状态的回调函数。

实例:异步加载图片

function loadImageAsync(url) {
  return new Promise(function(resolve, reject) {
    console.log(‘start‘)

    var image = new Image();

    image.onload = function() {

      resolve(image);
      console.log(‘image.onload‘)
    };

    image.onerror = function() {
      console.log(‘image.onerror‘)
      reject(new Error(‘Could not load image at ‘ + url));
    };

    image.src = url;
    console.log(‘end‘)
  });
}

执行:
var s=loadImageAsync(‘https://imgsrc.baidu.com/imgad/pic/item/caef76094b36acaf0accebde76d98d1001e99ce7.jpg‘)

结果:
start
end
undefined
image.onload


执行:

s

结果:

Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: img}

执行:

var f=loadImageAsync(‘https://imgsrc/c323232.jpeg‘)

结果:
start
end
undefined
image.onerror
Uncaught (in promise) Error: Could not load image at https://imgsrc/c323232.jpeg

 

以上是关于Promise对象的主要内容,如果未能解决你的问题,请参考以下文章

前端面试题之手写promise

前端片段整理

什么时候然后从Promise.all()的子句运行?

ES6 promise对象

JavaScript - Promise对象

Promise对象