promise学习

1. 什么是promise

promise抽象异步处理对象以及对其进行各种操作的组件.js中处理异步一般都是通过回调如下:
getAsync("fileA.txt", function(error, result){ if(error){// 取得失败时的处理 throw error; } // 取得成功时的处理 });
Promise则是把类似的异步处理对象和处理规则进行规范化,并按照统一的接口来写,不按规范写就会出错.promise实现上诉异步处理:
var pro = new promise(function(resolve,reject){ if(error){ reject(); }else{ resolve(); } }); pro.then(function(){ //when sucess happens do something }).catch(function(){ //when error happens do something })

2. 兼容性

我们要用一个东西肯定先考虑兼容啊,promise是es6里边的,所以兼容还是个问题,不过我们在此可以引用使之兼容的Polyfill类库如YUI的ypromise或es6-promise

3. promise的用法
  • 创建promise对象:我们通过new Promise(fn)来创建一个promise对象,fn接受两个参数 resolve和reject,当异步处理正常时调用resolve否则调用reject 下边是一个创建xhr的promise例子:
    function getURL(URL) { return new Promise(function (resolve, reject) { var req = new XMLHttpRequest(); req.open('GET', URL, true); req.onload = function () { if (req.status === 200) { resolve(req.responseText); } else { reject(new Error(req.statusText)); } }; req.onerror = function () { reject(new Error(req.statusText)); }; req.send(); }); } var URL = "http://httpbin.org/get"; getURL(URL).then(function onFulfilled(value){ console.log(value); }).catch(function onRejected(error){ console.error(error); }); Promise.resolve(value),快速创建promise对象,是new Promise(function(resolve){
    resolve(value);
    })`
    的语法糖。Promise.reject(value)用法同上
  • 在Promise里可以将任意个方法连在一起作为一个方法链
    aPromise.then(function taskA(value){ // task A }).then(function taskB(vaue){ // task B }).catch(function onRejected(error){ console.log(error); });
    我们可以通过Promise方法链方式来编写能以taskA → task B 这种流程进行处理的逻辑了。

先这样吧

你可能感兴趣的:(promise学习)