2017-11-14 12 views
0

WordIdは配列です。配列を繰り返し処理し、サービスコールを呼び出して応答をresponses配列に格納する必要があります。配列を繰り返し、サービス呼び出しを行い、配列内にレスポンスを格納します。

var wordId = []; 
var responses = []; 

for (var i = 0; i < result.words.length; i++) { 
if (result.words[i].exampleSentences == undefined) { 
wordId.push(result.words[i].identifier); 
} 
} 

self.getWordExample(0, wordId, responses, function(responses) { 
       console.log(responses); 
      }); 
      console.log("outside",responses); 

マイサービスファイル

getWordExample: function(i, wordId, responses,callback) { 
    var self = this; 
    services.WordExampleService.getWordExamples(wordId[i], function(err, response) { 
     responses.push(response); 
     i++; 
     if (wordId[i]) { 
      console.log("wordid",wordId[i]); 
      self.getWordExample(i, wordId, responses); 
     } 
     else if(callback){ 
      console.log(responses); 
      callback(responses); 
     } 
    }); 
} 

enter image description here

これは、サービスが最初に実行されているとwordidは、次の を実行しているconsole.Whyで最初にして関数を実行する方法はありますresponses

+1

[非同期呼び出しから応答を返す方法]の複製がありますか?(https://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call) – str

答えて

1

再帰的非同期式で呼び出します。

function callService(wordIdIndex, callback) { 
    services.WordExampleService.getWordExamples(wordId[wordIdIndex], function(err, response) { 
     responses.push(response); 

     wordIdIndex++; 
     if (wordId[wordIdIndex]) { 
      callService(wordIdIndex); 
     } 
     else if (callback) { 
      callback(responses); 
     } 
    }); 
} 

callService(0, function(responses) { 
    console.log(responses); 
}); 

このコードは、2番目のforステートメントの代わりに使用してください。

リクエストが非同期であるため、responsesに依存するものは、そのコールバック内で実行する必要があります。

+0

Urコードは問題を解決しています。私は 'respond'配列を返して、' callservice'関数の戻り値を取得したいので、 'reponses'配列を反復しなければなりません。 forループは関数 'callservice'の前に実行されています –

+0

@akshayarathinavel Ok、chcke更新。私はコールバックを追加しました。 – DontVoteMeDown

+0

もう一度私の質問を更新します。サービスコールに問題があります。それを調べてください。 –

関連する問題