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 这种流程进行处理的逻辑了。

先这样吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文适用的读者 本文写给有一定Promise使用经验的人,如果你还没有使用过Promise,这篇文章可能不适合你,...
    HZ充电大喵阅读 12,067评论 6 19
  • //本文内容起初摘抄于 阮一峰 作者的译文,用于记录和学习,建议观者移步于原文 概念: 所谓的Promise,...
    曾经过往阅读 5,017评论 0 7
  • JavaScript Promise 学习记录(一) 本文首先介绍了promise的三种状态及生成不同状态prom...
    kkdev阅读 4,290评论 0 0
  • promise 是什么 Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示。(简单说就是处理...
    shadow123阅读 2,669评论 0 2
  • 最近在与感冒进行着艰难的斗争,一直没有更新内容。本来是想分享一下关于互联网上的“90-9-1”法则的一些认识的,不...
    J又二分之一阅读 3,315评论 2 1

友情链接更多精彩内容