相关疑难解决方法(0)

正确的写入循环的方法.

如何正确构造一个循环以确保后续的promise调用和链式logger.log(res)通过迭代同步运行?(蓝鸟)

db.getUser(email).then(function(res) { logger.log(res); }); // this is a promise
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法(来自http://blog.victorquinn.com/javascript-promise-while-loop的方法)

var Promise = require('bluebird');

var promiseWhile = function(condition, action) {
    var resolver = Promise.defer();

    var loop = function() {
        if (!condition()) return resolver.resolve();
        return Promise.cast(action())
            .then(loop)
            .catch(resolver.reject);
    };

    process.nextTick(loop);

    return resolver.promise;
});

var count = 0;
promiseWhile(function() {
    return count < 10;
}, function() {
    return new Promise(function(resolve, reject) {
        db.getUser(email)
          .then(function(res) { 
              logger.log(res); 
              count++;
              resolve();
          });
    }); 
}).then(function() {
    console.log('all done');
}); …
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise bluebird

113
推荐指数
5
解决办法
13万
查看次数

在javascript中递归建立一个promise链 - 内存考虑因素

这个答案中,一个承诺链是递归建立的.

稍微简化,我们有:

function foo() {
    function doo() {
        // always return a promise
        if (/* more to do */) {
            return doSomethingAsync().then(doo);
        } else {
            return Promise.resolve();
        }
    }
    return doo(); // returns a promise
}
Run Code Online (Sandbox Code Playgroud)

据推测,这会产生一个调用堆栈一个承诺链 - 即"深"和"宽".

我预计内存峰值会大于执行递归或单独建立一个promise链.

  • 是这样吗?
  • 有没有人考虑过以这种方式建立连锁店的记忆问题?
  • 承诺库之间的内存消耗会有所不同吗?

javascript recursion promise

55
推荐指数
3
解决办法
1万
查看次数

而使用蓝鸟承诺的循环

我正在尝试使用promises实现while循环.

这里概述的方法似乎有效. http://blog.victorquinn.com/javascript-promise-while-loop 它使用这样的函数

var Promise = require('bluebird');

var promiseWhile = function(condition, action) {
    var resolver = Promise.defer();

    var loop = function() {
        if (!condition()) return resolver.resolve();
        return Promise.cast(action())
            .then(loop)
            .catch(resolver.reject);
    };

    process.nextTick(loop);

    return resolver.promise;
};
Run Code Online (Sandbox Code Playgroud)

这似乎使用反模式和弃用的方法,如强制转换和延迟.

有谁知道更好或更现代的方法来实现这一目标?

谢谢

javascript promise bluebird

17
推荐指数
1
解决办法
8827
查看次数

我应该如何构建处理多个相关异步任务的承诺?

我阅读了一些如何重构代码以适应承诺风格的示例,但似乎他们可能需要其他承诺库的帮助。

我的问题是我有多个异步任务,其中一些可能依赖于来自另一个调用的一些信息。所以我的代码看起来像这样:

假设我有一个图书馆桌子。图书馆的桌子上有很多书。一本书有很多页。一个页面有很多照片。

我还使用 LoopBack 为这些表创建实例。

我有一个这种格式的库对象数组。

{
    "location": "Hong Kong Island",
    "size": "25sq meter",
    "availableBooks" : [
        {
            "bookName": "Harry Potter",
            "pages": 235,
            "author": "J R Rowling"
            "pages": [
                {
                    "page": 1,
                    "content": "XXX",
                    "photos": [
                        {
                            "urlLink": "https://someLink",
                            "size": "360X250"
                        },
                        {
                            "urlLink": "https://google",
                            "size": "650X250"
                        }

                    ]
                }
                ,
                {
                    "page": 2,
                    "content": "XXX"
                }
            ]
        },
        {
            "bookName": "Lord Of The Rings",
            "pages": 335,
            "author": "J. R. R. Tolkien"

        }

    ]
} 
Run Code Online (Sandbox Code Playgroud)

对于伪代码,它看起来像这样。

for(something){ …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous promise

1
推荐指数
1
解决办法
1113
查看次数