一个月来,我一直感到困惑,搜索了所有内容,但找不到答案。
我想控制在node.js中首先运行的内容。我知道节点处理代码的方式是非阻塞的。我有以下示例:
setTimeOut(function(){console.log("one second passed");}, 1000);
console.log("HelloWorld");
在这里,我想运行第一个,输出“第二个通过”,然后运行第二个。我怎样才能做到这一点?我知道setTimeOut是解决此问题的一种方法,但这不是我要的答案。我试过使用回调,但无法正常工作。我不确定是否对回调有正确的理解。回调只是对我来说意味着函数参数,我认为这不会帮助我解决此问题。
解决此问题的一种可能方法是定义一个包含“错误优先回调”的函数,如以下示例所示:
function print_helloworld_atend(function helloworld(){
console.log("HelloWorld");
}){
setTimeOut(function(){console.log("one second passed");}, 1000);
helloworld();
}
我可以定义一个带有回调函数的函数,该函数知道何时完成先前的任务。在上面的函数中,如何使回调函数:helloworld在“ setTimeOut”表达式之后运行?
如果有可以解决我的问题的结构,那是我的第一选择。我厌倦了使用setTimeOuts。
如果有人可以提供帮助,我将不胜感激。谢谢阅读
您应该使用诺言。蓝鸟是一个很有前途的图书馆。比本机快,并具有强大的功能。使用promise可以将函数链接在一起,并且知道在前一个函数解析之前不会调用一个函数。无需设置超时或延迟。虽然可以,但是您可以。以下是延迟的示例。功能B直到A完成后6秒钟才会运行。如果删除,则.delay(ms)
B将在A完成后立即运行。
var Promise = require("bluebird");
console.time('tracked');
console.time('first');
function a (){
console.log('hello');
console.timeEnd('first');
return Promise.resolve();
}
function b (){
console.log('world');
console.timeEnd('tracked');
}
a().delay(6000)
.then(b)
.catch(Promise.TimeoutError, function(e) {
console.log('Something messed up yo', e);
});
输出:
→ node test.js
hello
first: 1.278ms
world
tracked: 6009.422ms
编辑:我认为,诺言是node / javascript中控制流程最有趣的方式。据我所知,本机JavaScript承诺中没有.delay()或.timeout()。但是,总体上有一些承诺。您可以在mozilla的网站上找到其文档。我建议您改用Bluebird。
使用bluebird而不是nativebird是因为:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句