Promise学习使用

Promise是承诺的意思,“承诺可以获取异步操作的消息”,是一种异步执行的方案,Promise有各种开源实现,在ES6中被统一规范,由浏览器直接支持。

Promise 对象有三种状态:pendingfullfilled 和 rejected,分别代表了 promise 对象处于等待、执行成功和执行失败状态

示例:  

  参数resolve,reject都是函数,执行成功调用 resolve(‘成功‘),操作状态变为fullfilled , 否则执行 reject(‘失败:‘ + timeOut),操作状态变为rejected,转化过程只能有一次.

  创建Promise对象执行test()函数。

 function test(resolve, reject) {
      var timeOut = Math.random() * 2;
      setTimeout(function() {
        if (timeOut < 1) {
          resolve(‘成功‘);
        } else {
          reject(‘失败:‘ + timeOut);
        }
      }, timeOut * 1000);
    }

    new Promise(test).then(res => {
      console.log(res);
    }).catch(res => {
      console.log(res);
    })

Promise串行执行任务:

  如果有多个异步任务,先做任务1,成功之后再做任务2,这样会写多层嵌套代码,Promise可以更简单的使用: 

job1.then(job2).then(job3).catch(handleError);

job1、then(job2)、then(job3)是一个Promise对象,job2、job3是函数方法

function multiply(input) {
      return new Promise(function(resolve, reject) {
        console.log(‘相加:‘ + input + ‘+‘ + input)
        setTimeout(resolve, 500, input * input); //将input*input参数传给执行函数resolve
      })
    }

    function add(input) {
      return new Promise(function(resolve, reject) {
        console.log(‘相乘:‘ + input + ‘*‘ + input)
        setTimeout(resolve, 500, input + input);
      })
    }

    var p = new Promise(function(resolve, reject) {
      console.log(‘执行Promise‘)
      resolve(5);
    })

    p.then(multiply)
      .then(add)
      .then(multiply)
      .then(add)
      .then(res => {
        console.log(‘最终结果:‘ + res)
      })

then方法相当于success方法,catch方法相当于fail方法

当两个任务不存在依赖关系的时候,可以并行请求,用Promise.all()实现

var p1 = new Promise(function (resolve, reject) {
    setTimeout(resolve, 500, ‘P1‘);
});
var p2 = new Promise(function (resolve, reject) {
    setTimeout(resolve, 600, ‘P2‘);
});
// 同时执行p1和p2,并在它们都完成后执行then:
Promise.all([p1, p2]).then(function (results) {
    console.log(results); // 获得一个Array: [‘P1‘, ‘P2‘]
});

处理多个任务的时候,只需要获得先返回的结果即可,用Promise.race()实现

var p1 = new Promise(function (resolve, reject) {
    setTimeout(resolve, 500, ‘P1‘);
});
var p2 = new Promise(function (resolve, reject) {
    setTimeout(resolve, 600, ‘P2‘);
});
Promise.race([p1, p2]).then(function (result) {
    console.log(result); // ‘P1‘
});

在一些任务没有回调函数或者不好控制完成时间的时候,我们可以用Promise来处理。

  

原文地址:https://www.cnblogs.com/dongzhi1111/p/9724081.html

时间: 2024-11-25 04:27:57

Promise学习使用的相关文章

Javascript Promise 学习

Promise 就是处理异步的一个规范方法 a();b();alert("a");如果a() 里面有一个ajax 或者settimeout 那么alert("a") 会先跑这就是异步了.从前我们用一堆callBack函数来解决问题,但是这样写不好看.promise 的写法美丽多了依据上面的例子a().then(b).then(function(){alert("");})这样它会先跑完 a -> b - > alert("&

Javascript Promise 学习 (中)

时隔多日,对promise有了多一点点的了解. 最近用angularjs 做开发,所以研究了一下它的 $q 功能不算很强大,算是简化版的 Q.js 参考了一下源码,不过我的等级还差很多... 作为学习,我自己又重写了一篇. 这次的比较整齐.代码也少了 . $q = function (asyncFn) { var defer = new Deferred(); asyncFn(defer.resolve.bind(defer), defer.reject.bind(defer)); return

ES6中Promise学习笔记

参考资料: 廖雪峰 javascript教程-promise 阮一峰 ECMAScript 6 入门-Promise 对象 JavaScript Promise迷你书(中文版)

Promise学习

转自:http://www.cnblogs.com/lvdabao/p/es6-promise-1.html 去年6月份, ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范.作为ES6中最重要的特性之一,我们有必要掌握并理解透彻.本文将由浅到深,讲解Promise的基本概念与使用方法. ES6 Promise 先拉出来遛遛 复杂的概念先不讲,我们先简单粗暴地把Promise用一下,有个直观感受.那么第一个问题来了,Promise是什么玩意呢?是一个类?对象

C++11多线程——&lt;future&gt;之std::promise学习

一  <future>头文件简介 1 Classes std::future std::future_error std::packaged_task std::promise std::shared_future 2 Functions std::async std::future_category 二 std::promise类 1 std::promise class statement Template <class T> promise; Template <cla

Promise学习小结

初步了解Promise 从概念上了解Promise Promise是一种封装和组合未来值的易于复用的机制. Promise 是异步编程的一种解决方案. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的API,各种异步操作都可以用同样的方法进行处理. Promise对象的两个特点 对象的状态不受外界影响.Promise对象代表一个异步操作,有三种状态:

promise学习总结

什么是Promise Promise是异步编程的一种解决方案,它有三种状态,分别是pending-进行中.resolved-已完成.rejected-已失败 当Promise的状态又pending转变为resolved或rejected时,会执行相应的方法,并且状态一旦改变,就无法再次改变状态,这也是它名字promise-承诺的由来 直接上案例了,在案例中理解: 最简单的promise new Promise(resolve =>{ setTimeout(()=>{ resolve('hell

Promise 学习

Promise对象是一个构造函数--https://www.cnblogs.com/lvdabao/p/es6-promise-1.html console.dir--https://www.kancloud.cn/iplaylf2/javascript/363984 const promise = new Promise(function(resolve, reject) { // ... some code if (/* 异步操作成功 */){ resolve(value); } else

javascript Promise学习

目录 Promise 基础语法 三种状态 Promise原型方法 Promise.prototypr.then() Promise.prototype.catch() Promise.prototype.finally() Promise 的属性和方法 Promise.all(iterable) Promise.race(iterable) Promise.resolve(value) Promise.reject(err) Promise Promise 是ES6新增的对象,用来处理异步,使用