需要帮助了解本地承诺与Blubird的表现

时间:2016-09-12 22:32:39

标签: javascript promise es6-promise chai-as-promised

背景

  1. 我正在编写一个流星应用程序,该应用程序最初填充数据库,其数据是通过对某个服务器上的API端点发出的SOAP请求检索的。
  2. 初始请求是通过我选择的搜索词搜索。我找回了与我的搜索匹配的记录的ID列表。
  3. 然后我发出另一个API请求,但这一次,对于那些我随后存储到我自己的数据库的记录(只有选定的值,而不是所有数据)
  4. 如果我有一个搜索词列表,则会对每个搜索词进行上述操作。
  5. 避免回调地狱'因为我虽然这是一个学习新东西的好机会,但我选择顺序使用Promise:这就是这样的: forEach searchTerm - > getTheResults.then.forEachResult-> fetchRecord
  6. 对于100左右的短序列,它工作正常但是当它达到1000时它会挂起。在与谷歌叔叔交谈之后,我遇到了一些线索,关于本地Promise没有以某种方式进行优化以及第三方库更快。所以我决定尝试Bluebird,但在此之前我会测试它可能会让事情变得更快的断言。
  7. 代码 下面的代码创建了一系列的睡眠承诺'。我们的想法是更换Bluebird promise实现,并观察测试时间超过5000 Promises的时间。

    var Promise = require("bluebird"); // comment out for native implementation
    
    function sleep(time) {
        return new Promise(function (resolve, reject) {
            setTimeout(function() {
                // process.stdout.write(".");
                resolve(true);
            }, time);
        });
    }
    // the function is badly named, please ignore
    function nativePromiseSequence(n) {
        // dont know how this first line works
        const arr = Array.apply(null, Array(n)).map(function () {});
        return arr.reduce(function(sequence, e, i, a) {
            return sequence.then(function() {
                return sleep(1);
            });
        }, Promise.resolve());
    }
    

    测试 我正在使用' chai-as-promised'用于测试承诺。

    it('Run 5000 promises in a chain', function() {
                this.timeout(7000);
                return nativePromiseSequence(5000).should.eventually.equal(true);
            });
    

    结果 在一个5000的Promise链中,Bluebird实现的测试比Native承诺的慢了一秒

    我在这里犯过错误还是错过了什么?

0 个答案:

没有答案