在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函数的工作原理,但文档非常分散,以至于压倒性的。
如何使两个脚本按照我需要的顺序执行?
答案 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)