如何将async.waterfall与外部异步函数一起使用(RedisSMQ)

时间:2016-07-21 13:12:19

标签: node.js asynchronous server iteration waterfall

我有一个rsmq服务器,应该检查给定的URL是否包含图像。我需要让程序同步运行,因为init()函数和while(true)循环可以为所有请求提供服务。

首先,在init()函数之前调用循环。

第二次,我希望循环在继续循环之前等待每次迭代完成,因此不会导致堆溢出。

尝试使用async.waterfall。我的代码: Pastebin.com link

提前致谢!

1 个答案:

答案 0 :(得分:0)

这是一种使用while (true)的非常糟糕的做法,因为它会阻塞并且会在你想到的时候发出大量的请求而不是一个请求。使用async.during

async.whaterfall([
    (done) => {
        // do some async stuff
        done(null, false);
    },
    (isLoaded, callback) => { // isLoaded is false
        async.during(
            () => ! isLoaded, // Test async function result
            (done) => { // Run check
                checkIsLoaded((err) => {
                    if (err) {
                        done(err);
                    } else {
                        isLoaded = true;
                    }
                })
            },
            callback
        )
    }
], (err, result) => {
    // result got...
);