需要在节点上稍后执行的模块

时间:2016-06-01 07:50:23

标签: javascript node.js

在index.js中我有一个require函数和一些额外的东西。

所需模块执行延迟;

index.js

console.log('1')
var delay_function = require('./delay_function')
console.log('2')

delay_function.js

    var fetch = require('node-fetch');

    fetch('http://example.com/api').then(function(res){
        console.log('wuhu');
    });

上述两个脚本的结果是:

    1
    2
    wuhu

而不是:

    1
    wuhu
    2

我是节点的新手,并试图了解require函数的工作原理,但文档非常分散,以至于压倒性的。

如何使两个脚本按照我需要的顺序执行?

2 个答案:

答案 0 :(得分:1)

你看到的是完全正常的。

在你的delay_function.js中,你在后台启动了一个获取操作,我们说这个调用是非阻塞的。它允许节点在开始提取数据时执行其他操作。

以下是您问题的解决方案:

delay_function.js

var fetch = require('node-fetch');
var task = fetch('http://example.com/api');        
task.then(function(res){
    console.log('wuhu');
});

module.exports = task;

index.js

console.log('1')
require('./delay_function').then(function(res) {
  console.log('2')
}

<强>释

delay_function.js,当需要开始获取结果时,在完成提取时显示wuhu并返回(使用module.exports)后台任务,这样说。在索引中,您检索后台任务并在完成后显示2.

答案 1 :(得分:1)

Javascript是非阻塞的,因此当您需要时,它不会阻止执行并立即显示2。获取完成后,它会显示wuhu

要按顺序执行此操作,您可以使用Promise。

基本上它看起来像这样

doThis().then(doThat)