Javascript 在循环中使用Promise对象

先看一个生成Promise对象的方法

 function createPromise() {
        var promise;
        promise = new Promise(function(resolve, reject) {
            var elapse = Math.random() * 2000;
            setTimeout(resolve, elapse);
        });
        return promise;


    }

目标是生成10个Promise对象并依次输出Promise的结果。

首先看这种调用方式:

 for (var i = 0; i < 10; i++) {
            createPromise().then(function() {
            console.log(i);
            })
        }

由于Promise是异步调用,then内的回调函数在for循环之后调用,所以在所有的then callback里面,i=10。所以输出为
10
10
10
10
10
10
10
10
10
10

换另外一种调用方式

  var promiseArray = [];
        for (var i = 0; i < 10; i++) {
            promiseArray.push(createPromise());
        }
        Promise.all(promiseArray).then(function() {
             for (i = 0; i < data.length; i++)
                 console.log(i);
                 })

因为Promise.all函数可以并行调用参数中的Promise对象方法,并且将所有Promise对象方法返回值作为数组输入到then回调中,因此这种方式调用可以解决Promise的循环创建和调用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...
    neromous阅读 8,735评论 1 56
  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 2,753评论 0 5
  • 你不知道JS:异步 第三章:Promises 在第二章,我们指出了采用回调来表达异步和管理并发时的两种主要不足:缺...
    purple_force阅读 2,126评论 0 4
  • 前言 本文旨在简单讲解一下javascript中的Promise对象的概念,特性与简单的使用方法。并在文末会附上一...
    _暮雨清秋_阅读 2,253评论 0 3
  • Volley的ImageRequest中的图片压缩代码 参考文章: Bitmap 解析 Bitmap 详解 你的 ...
    JustCode阅读 347评论 0 1