2016-04-12 14 views
0

エクスポートされたjsファイルから関数にアクセスしようとしています。 ので、私はこのように、このファイルを必要とする私のメインapp.jsファイルの先頭に:必要な機能の間にスコープが必要

var api = require("./plugins/apis.js”); 

私は私のようなパラメータとしてAPIを送信しても、他のVAR 関数の内部このファイルから関数を呼び出すことはできませんが、

/** 
* @param access_token your access token from your instance settings page 
* @param [options] json object to be passed to the external web service. Can include any of 'context', 'verbose', 'n' 
* @param callback callback that takes 2 arguments err and the response body 
*/ 


var getData = function (access_token, options, callback) { 
    if(!callback) { 
     callback = options; 
     options = undefined; 
    } 
// do stuff 
} 

function init(api) { 
    var information = getData(ACCESS_TOKEN, function (err, res) { 
     init(api) 
     // do stuff, but calls from apis.js functions not available. 

私はこれを再帰的に要求したくありませんが、スコープ外でなくてもgetData関数内でこれを必要とします。 コールバックの使用方法がわかりません。誰かがコールバックを使用する方法を説明し、外部apis.js関数の関数を同時に利用できるようにすることはできますか?

+0

あなたは 'require'への呼び出しから' .js'を削除する場合は、同じ問題を得るのですか?そして、このコードはすべて 'app.js'内にありますか? – csum

+0

私はそれをすることに問題は見られません。なぜこのような行動を取るのかを理解するためには、より多くの情報が必要です。 getData関数とapi.jsモジュールの実装を提供できますか? – jahnestacado

答えて

2

getDataのコールバック関数の例では、api変数がコールバックの独自のapiパラメータによってオーバーライドされています。だから、少なくとも、あなたがアクセスしたい場合は、それに一意の名前を付ける必要がありますapiあなたrequire編:

var api = require("./plugins/apis”); 

var information = getData(ACCESS_TOKEN, function (err, res, _api) { 
    // do stuff 
    // _api was passed here from getData() 
    // api is still the object pulled in from your call to require() 
}); 
+0

なぜか分かりませんが、api.dostuff()はgetData内で動作しません。エラーは表示されません。 getDataの外部で全く同じ関数呼び出しを使用すると、期待どおりに実行されます。これは私が同期関数を呼び出すためですか? – staminna

+0

コードを見ずに言うのは難しいです。コールバック関数内の何かが実行されますか? 'getData'関数がコールバックを呼び出すことを確認してください。あなたが新しい質問を始めてここにリンクしたいのであれば、私は見ていきます。 – csum