2016-06-01 3 views
0

index.jsには、require関数といくつか余分なものがあります。ノードで後で実行されるモジュールを必要とする

必要なモジュールの実行に遅延があります。上記2つのスクリプトの

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

ようになりますあなたは[非同期滝](https://github.com/caolan/async#waterfall)を検討する必要があることことができます。 – Shrabanee

答えて

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

JavaScriptはブロックされていませんので、必要なときに実行をブロックしてすぐに表示しません。フェッチが終了すると、wuhuと表示されます。

これを行うには、Promiseを使用します。

基本的にはこの

doThis().then(doThat) 
関連する問題