2016-11-03 16 views
0

私はrestler(https://github.com/danwrong/restler)を使用して外部ソースからapi呼び出しを行います。 Sailsjsでは、私が理解しているところからヘルパー関数をサービスと呼びます。私はget、postなどのrestlerコードを自分のサービスに入れているので、同じコードを何度も何度も何度も繰り返すことはありません。しかし、私のコントローラーでうまく機能していたレストラー機能はもはやサービスでは機能しませんでした。たとえば:Sailsjs外部モジュールがサービスで動作していません

//api/services/myService.js 
module.export{ 
     httpGet: function(){ 
     var rest = require('restler'); 
     rest.get('http://google.com').on('complete', function(result) { 
     if (result instanceof Error) { 
      console.log('Error:', result.message); 
      this.retry(5000); // try again after 5 sec 
     } else { 
      console.log(result); 
     } 
     }); 

    } 

} 

私のサービスが正しく使用されていることがわかりました。私はダブルチェックにサービスから変数を返す試してみた:

 httpGet: function(){ 
     var check = null; 
     var rest = require('restler'); 
     rest.get('http://google.com').on('complete', function(result) { 
     if (result instanceof Error) { 
      check = false; 
      console.log('Error:', result.message); 
      this.retry(5000); // try again after 5 sec 
     } else { 
      console.log(result); 
      check = true; 
     } 
     }); 
     return check; 
     //in the controller, myService.httpGet() returns null, not true or false 
    } 

すべてのヘルプは非常に高く評価されるだろう。 Salisjs v0.12.4

答えて

2

サービスをコールバックを受け入れるようにする方がよいでしょう。またご質問、あなたは早くあなたがそれに割り当てられたnull値でサービスからreturn check;を戻ってきているに関するサービス

myService.httpGet(function callback(err, result){ 
    // handle error 

    // use result 

}) 

を呼び出すときに

//api/services/myService.js 
module.exports = { 
     httpGet: function(callback){ 
     var rest = require('restler'); 
     rest.get('http://google.com').on('complete', function(result) { 
     if (result instanceof Error) { 
      console.log('Error:', result.message); 
      return callback(result, null) 
      //this.retry(5000); // try again after 5 sec 
     } else { 
      console.log(result); 
      return callback(null, result) 
     } 
     }); 

    } 

} 

は、その後、あなたのコントローラからのコールバックを渡します。

PS:あなたはモジュールオブジェクトのプロパティとしてhttpGet機能をエクスポートする必要があります代わりにコールバック(callback hell)を使用しての約束

+1

小さなものが1つ。私は '' module.exports = {'' '。それ以外の場合は、構文エラーがあります。 – Bonanza

+0

@Bonanzaはい。確かに。それはタイプミスでした。 :) – MjZac

+0

ありがとうございます。私は基本的にコールバックを誤解しました。私は関数の値を返そうとしていました。 – hamncheez

0

を使用することができます。基本的には、「小さな」タイプミスがあります。この代わりに:

module.exports = { 
     httpGet: function(){ 

そして、あなたは結果を返すようにしたい場合も、callbackを追加します:

module.exports = { 
     httpGet: function(callback){ 
       ... 
       if (result instanceof Error) { 
        console.log('Error:', result.message); 
        return callback(result, null) 
       } else { 
        console.log(result); 
        return callback(null, result) 
       } 
        ... 

...または使用

module.export{ 
     httpGet: function(){ 

あなたはこれを持っている必要があります約束する。

関連する問題