什么是PROMISE?

大家好,我是IT修真院成都分院第8期的学员,一枚正直纯洁善良的WEB前端程序员。今天给大家分享一下闭包是什么,用处如何。


1.背景介绍

什么是promise?

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

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。 从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操 作都可以用同样的方法进行处理。

2.PROMISE的基本用法

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

var p = new Promise(function (resolve, reject) {

// ... some code

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

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。 它们是两个函数,由 JavaScript 引擎提供,不用自己部署。

resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 Pending 变为 Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是, 将Promise对象的状态从“未完成”变为“失败”(即从 Pending 变为 Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。 Promise实例生成以后,可以用then方法分别指定Resolved状态和Rejected状态的回调函数。

p.then(function (value) {// success}, function (error) {// failure});

3.如何使用PROMISE?

function runAsync(){

var p = new Promise(function(resolve, reject){

//做一些异步操作

setTimeout(function(){console.log('执行完成');resolve('随便什么数据');}, 2000);});return p;}

runAsync().then(function(data){

console.log(data);//后面可以用传过来的数据做些其他操作//......});

then里面的函数就跟我们平时的回调函数一个意思,能够在runAsync这个 异步任务执行完成之后被执行。这就是Promise的作用了,简单来讲,就是能把 原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。 写成回调函数如下:function runAsync(callback){

setTimeout(function(){console.log('执行完成');callback('随便什么数据');}, 2000);};runAsync(function(data){console.log(data);});

问题:

1、既然回调函数回调函数能实现异步操作,为什么还要用Promise呢?

有多层回调该怎么办?如果callback也是一个异步操作,而且执行 完后也需要有相应的回调函数,该怎么办呢?总不能再定义一个callback2,然后给 callback传进去吧。而Promise的优势在于,可以在then方法中继续写Promise对 象并返回,然后继续调用then来进行回调操作。

2、catch方法有什么作用?

在http请求返回一个错误的方法,如果使用.then方法,返回的错误就不会被捕捉到,.then后面的代码就会发生错误。catch是捕捉到了错误,并且写了在返回的错误的情况下怎么做。

3.、race()方法第一个请求成功之后,后面的请求会继续吗?

race方法 里面的函数全部都会执行,只是看哪个先返回,先返回的,.then方法先执行。

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

推荐阅读更多精彩内容