Promise 对象

异步编程 方案,已同步的方式表达异步的代码,解决回调地狱的问题

比传统的解决方案——回调函数事件——更合理和更强大

是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。

Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理

  • 基本使用
  • const promise = new Promise(function(resolve, reject) {
    // ... some code if (/* 异步操作成功 */){
    resolve(value);
    } else {
    reject(error);
    }
    }); promise
    .then(
    ()=>{
    console.log('成功的回调');
    },
    ()=>{
    console.log('失败的回调');
    },
    );
    console.log('主线程执行完了'); /**** 等同于 ****/
    const promise = new Promise((resolve, reject)=>{
    /*
    resolve 解决 成功 将 Promise 对象的状态 由初始化变成成功
    reject 拒绝 失败 将 Promise 对象的状态 由初始化变成失败 Promise 三种状态
    初始化状态
    成功状态
    失败状态
    */
    setTimeout(function(){
    const result = 202;
    console.log('请求成功了');
    resolve(result); // 触发成功的回调
    }, 1000);
    }); promise.then(result=>{
    console.log('成功的回调'+result);
    }).catch((result)=>{
    console.log('失败的回调'+result);
    });
    console.log('主线程执行完了');
  • Promise.resolve() 和 Promise.reject()    创建对象,状态为 成功 和 失败
  • Promise.all([要检测的对象数组]);    // 在所有的 promise 都触发 resolve 回调,才会成功。
  • 成功时接收 resolve ,失败只接收 reject。结果为数组
  • 实例
  • /**** 简单 独立异步任务 ****/
    const a = new Promise((resolve, reject)=>{
    setTimeout(function(){
    resolve("成功!");
    }, 1000);
    }); const aa = new Promise((resolve, reject)=>{
    setTimeout(function(){
    resolve("成功!");
    }, 2000);
    }); const aaa = new Promise((resolve, reject)=>{
    setTimeout(function(){
    resolve("成功!");
    }, 3000);
    }); Promise.all([a, aa, aaa]).then(result=>{
    console.log(result); // 接收到数组是 每个 Promise 发送过来的结果
    }).catch(result=>{
    console.log(result);
    }); console.log('主线程执行完了!'); /**** 复杂 分线程关联任务 ****/
    const b = new Promise((resolve, reject)=>{
    setTimeout(function(){
    console.log("Done1"+"First");
    resolve("Done1"+"First");
    }, 1000);
    }); b.then(result=>{
    return new Promise((resolve, reject)=>{
    setTimeout(function(){
    console.log("Done2"+result);
    resolve("Done2"+result);
    }, 2000);
    });
    }).catch()
    .then(result=>{
    return new Promise((resolve, reject)=>{
    setTimeout(function(){
    console.log("Done3"+result);
    resolve("Done3"+result);
    }, 3000);
    });
    }).catch()
    .then(result=>{
    console.log("All Done!"+result);
    }).catch() console.log('主线程执行完了!');

ECMA Script 6_异步编程之 Promise的更多相关文章

  1. 异步编程之Promise(3):拓展进阶

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  2. 异步编程之Promise(2):探究原理

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  3. (翻译)异步编程之Promise(1):初见魅力

    原文:https://www.promisejs.org/ by Forbes Lindesay 异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2) ...

  4. 前端异步编程之Promise和async的用法

    传统的异步解决方案采用回调函数和事件监听的方式,而这里主要记录两种异步编程的新方案: ES6的新语法Promise ES2017引入的async函数 Generator函数(略) Promise的含义 ...

  5. JavaScript的异步编程之Promise

    Promise 一种更优的异步编程统一 方法,如果直接使用传统的回调函数去完成复杂操作就会形成回调深渊 // 回调深渊 $.get('/url1'() => { $.get('/url2'() ...

  6. 异步编程之Generator(1)——领略魅力

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  7. 异步编程之co——源码分析

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  8. 异步编程之Generator(2)——剖析特性

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  9. Javascript异步编程之setTimeout与setInterval详解分析(一)

    Javascript异步编程之setTimeout与setInterval 在谈到异步编程时,本人最主要会从以下三个方面来总结异步编程(注意:特别解释:是总结,本人也是菜鸟,所以总结不好的,请各位大牛 ...

随机推荐

  1. 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)

    一. 五大构件 引言: Quartz.Net的五大构件 1.  调度器:Scheduler 2.  作业任务:Job 3.  触发器: Trigger 4.  线程池: SimpleThreadPoo ...

  2. redis远程连接报错记录

    错误如下 redis可视化工具连接测试 telnet ip 6379 修改关键参数如下 #开通外网访问 # bind 127.0.0.1 #以后台方式运行 daemonize no #取消保护模式,保 ...

  3. Karma (Test runner)

    Karma https://baike.baidu.com/item/%E7%BE%AF%E7%A3%A8/7618552?fromtitle=Karma&fromid=878453 1,意译 ...

  4. java(7)数组

    一.什么是数组及其作用? 定义:具有相同数据类型的一个集合 作用:存储连续的具有相同类型的数据 二.java中如何声明和定义数组 2.1 声明和定义的语法: 数据类型[ ] 数组名:( int[ ] ...

  5. Kaldi nnet3的fastlstm与标准LSTM

    标准LSTM:             与标准LSTM相比,Kaldi的fastlstm对相同或类似的矩阵运算进行了合并.     # Component specific to 'projected ...

  6. 预置app/apk到系统 && 预置so库进系统 && 预置普通文件和文件夹进系统

    https://blog.csdn.net/zhandoushi1982/article/details/4695460

  7. 搬运,B站up主『凉风有性胖次君』日日日日日日日日日日在校园

    这个视频超有毒,简直丧心病狂,我竟无言以对,凉风是有多大的耐性,搜集了这么多元素,哈哈哈~~~赶紧搬运,怕哪天B站都给封了 也就是说世界本来喜欢的是言叶,但是言叶爱上了一直在电车上暗恋她的诚哥,于是世 ...

  8. PHP实用工具类

    2018年10月25日 20:21:09 组装SQL语句 适用MySQL, 链式调用, 组装后可传参选择是否查询数据库 项目地址: 码云 生成数据字典 适用MySQL, 链式调用, 可生成word, ...

  9. 爬虫高性能 asyncio库 twisted库 tornado库

    一 背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是 ...

  10. java 学习之环境配置

    准备JDK 到Java官网下载jdk即可,网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html. 配置开发环境 鼠 ...