在c#中我会这样做 -
double progress = 0;
while (progress < 100)
{
var result = await PerformAsync();
progress = result.Progress;
await Task.Delay();
}
简单的7行代码。 node.js中的等价物是什么? 基本上需要一个检查条件的while循环,直到满足该条件,睡眠然后执行一些异步操作。
答案 0 :(得分:2)
当你以node.js的方式思考时,有一个基本的范式转换。
正如已经写过并在节点&#34;一切都是并行的,除了你的代码&#34; 。 JS是单线程的,因此如果你让线程休眠,一切都会阻塞。
但是如果你以自然的方式对问题进行建模,那么设计一个asysnc操作会花费时间来运行,当它完成时让它通知你。而不是等待它完成。
您可以设计asysnc(performAsysnc)操作来发出事件,然后提供在该事件发生时执行的回调。
因此它更加紧凑和自然。您的代码可能看起来像
performAsysnc().on('result',function cb () {// do what pleases you});
答案 1 :(得分:1)
一般来说,当您对表格有疑问时
&#34;我可以用语言
A
做一件事;如何使用语言B
?&#34;
检查hyperpolyglot。它是一个页面,提供跨不同语言类别的某些术语和概念的摘要。
scripting页面向您展示了如何在JS,Python,Ruby和PHP中使用while
loop。
答案 2 :(得分:0)
Node.js,你猜,它是一个javascript文件。所以你可以使用javascript代码。但是你应该使用什么有一些不同。在exmaple;使用Node.js,您可以使用sync while;
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()函数,所以不是在技术上,而是在实际上我们使用循环。
答案 3 :(得分:0)
查看https://github.com/caolan/async,其中包含许多此类同步任务的方法。