大家好,我是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方法先执行。