在Node.js中编写while循环

3

在C#中,我会这样做 -

double progress = 0;
while (progress < 100) 
{ 
    var result = await PerformAsync(); 
    progress = result.Progress; 
    await Task.Delay(); 
} 

这是一段简洁的7行代码。 在node.js中如何实现相同的功能? 基本上需要一个while循环,检查条件,并在满足该条件之前等待一段时间,然后执行某些异步操作。


未来版本的JS中有类似的概念,但仍然存在替代库。你可以查看https://github.com/yortus/asyncawait - Harpreet Singh
更多内容请访问:https://jakearchibald.com/2014/es7-async-functions/ - Harpreet Singh
你确定你真的需要一个循环吗?为什么? - slebetman
4个回答

3

当你用Node.js的方式思考时,会有一个基本的范式转变。

正如在Node中所说:“除了你的代码,一切都是并行运行的”。JS是单线程的,因此如果让该线程休眠,则所有操作都会被阻塞。

但是,如果您以自然的方式来设计问题,那么就应该设计一个异步操作,它需要花时间来运行,完成后通知您。而不是让您等待它完成。

因此,您可以设计异步(performAsync)操作来发出事件,然后提供回调函数,在事件发生时执行该回调函数。

因此,这种方法更加紧凑和自然。您的代码可能如下所示:

performAsync().on('result',function cb () {// do what pleases you});

1
一般来说,当你有以下问题时:

“我可以用语言A做某件事情,如何在语言B中做到相同的效果?”

请查看hyperpolyglot。这是一个提供各种语言类别下特定术语和概念摘要的页面。
脚本编程页面会向你展示如何在JS、Python、Ruby和PHP中使用while循环等内容。

0

0

Node.js,正如你所猜测的那样,它是一个JavaScript文件。因此,您可以使用JavaScript代码。但是有一些不同之处,关于您应该使用什么。例如;使用Node.js时,您可能想要使用同步方式;

var page = 2;
var last_page = 100;

(function loop() {
    if (page <= last_page) {
        request("/data?page=" + page, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                store_data(body)
            }
            page++;
            loop();
        });
    }
}());

在这个例子中,我们在loop()函数中调用loop()函数,因此从技术上讲我们并没有使用循环,但实际上我们是在使用循环。

异步示例:{{link1:在node.js中进行异步循环}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接