2016-09-01 14 views
0

私は特定の配列を処理するcalled.jsを呼び出します。それは完了までに不明な時間がかかります。 called.jsのメインシーケンスを続行する前に、処理が完了していることを確認します。Javascript - リモートモジュールで処理が完了したことを確認するにはどうすればよいですか?

メインモジュールの実行が完了する前に、処理が完了していることを確認するにはどうすればよいですか?

caller.js

//caller.js 
var called = require('./called.js'); 
var inst = new called(); 
var ary = [1, 2, 3]; 

console.log('caller before',ary); 
inst.process(ary); 
console.log('caller after',ary); 
//do other stuff with the modified array 

called.js

//called.js 
module.exports = function() { 
    var array = []; 
    var a = 'a'; 
    var b = 'b'; 

    return { 
     process: (arr)=> { 
      array=arr; 
      longtime(); 
     } 
    }; 

    function longtime(){ 
     {para_a: a, para_b: b}, 
     function(err, response) { 
       //process the response and update the array 
       //takes an unknown time to complete, 
       //and the number of elements to be updated are unknown also 
     }); 
    } 
}; 

修正

caller2.js

var called = require('./called.js'); 
var inst = new called(); 
var ary = [0, 1, 2]; 

console.log('caller before',ary); 
inst.process(ary, do_work); 

function do_work(){ 
    console.log('processing finished'); 
    console.log('caller after',ary); 
} 

called2.js

module.exports = function() { 
var array = []; 

return { 
    process: (arr, callback)=> { 
     array=arr; 
     console.log('process calling longtime'); 
     longtime(array, function (response){ 
     console.log('process got callback:',response); 
     callback(); 
     }); 
    } 
    }; 
}; 

function longtime (ar, callback){ 
    setTimeout(function(){ //this simulates a slow API call 
     ar.push(3); 
     var str = 'array now '+ar.length; 
     callback(str); 
     }, 5000); 
} 
+0

'longtime'関数に構文エラーがあります。それは本当にどのように見えるのですか? – Bergi

+0

コールバックや約束を使ってみましたか? – Bergi

+0

ありがとう@Bergi。私はそれを修正しました。私は、コールバック内でコールバックを使用するのを少し気にしています。私は 'inst.process(ary、function(resp){// set ready}) 'のようなことをしますか? –

答えて

0

(bergiが語ったように)あなたは、コールバックを使用することができます。

は通常のJSに機能を追加します。

function loaded(){ 
alert("loaded"); 
} 

はjsのロードされたインサートの終わりを追加します。 :

loaded(); 
+0

これは簡単ですが、 'loaded()'は他のモジュールで 'function loaded()'を見つける方法をどのように知っていますか? –

+0

@Steve Taylor:私はあなたの環境を知っていませんが、通常、すべての機能はグローバルウィンドウオブジェクトの一部であり、お互いを簡単に呼び出すことができます –

関連する問題