簡體   English   中英

在 node.js 中編寫一個 while 循環

[英]writing a while loop in node.js

在 C# 中,我會這樣做 -

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

一個不錯的簡單 7 行代碼。 node.js 中的等價物是什么? 基本上需要一個檢查條件的 while 循環,直到滿足該條件,睡眠然后執行一些異步操作。

當您以 Node.js 的方式思考時,會發生根本性的范式轉變。

正如在節點中所寫和所說的“除了你的代碼之外,一切都並行運行”。 JS 是單線程的,因此如果你讓那個線程 sleep ,一切都會阻塞。

但是,如果您以自然的方式為您的問題建模,那就是設計一個異步操作,該操作需要時間來運行,並在完成后讓它通知您相同的情況。 而不是你等待它完成。

這將設計您的異步 (performAsync) 操作以發出事件,然后在該事件發生時提供要執行的回調。

所以它更加緊湊和自然。 你的代碼可能看起來像

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

一般來說,當你對表格有疑問時

“有一件事我可以用語言A做;我如何用語言B做?”

檢查hyperpolyglot 這是一個頁面,提供跨各種語言類的某些術語和概念的摘要。

腳本頁面向您展示了如何在 JS、Python、Ruby 和 PHP 中使用while循環

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() 函數,所以不是在技術上而是在實際中我們使用循環。

異步示例: node.js 中的異步 for 循環

看看https://github.com/caolan/async ,它有很多用於此類同步任務的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM