2017-01-18 3 views
0

流星で簡単に気象サービスを呼び出そうとしています。私はクライアントを同期させることさえできません。以下のコードでは、user.testDataに "テストデータ"が含まれていると想定していますが、何も含まれていません。ユートピアでWebサービスコールを同期させる方法

if (Meteor.isClient) { 
    Template.confirmWeather.onRendered(function(){ 
     var validator = $('.confirmWeatherAndGoToMessage').validate({ 
      submitHandler: function(event){ 
    Meteor.bindEnvironment(Meteor.call('testWeather',Meteor.bindEnvironment(function(error,result) 
       { 
        if (error) 
        { 
         console.log(error.message) 
        } 
        else 
        { 
         var userId = Meteor.userId(); 
         var user = Meteor.users.findOne({_id: userId}); 
         if (user.testData) 
         { 
          console.log(user.testData); 
         } 
        } 
       }))); 


      } 
     }); 
    }); 

} 


if (Meteor.isServer) { 
    Meteor.methods({ 
     testWeather: function() { 
      var soap = Npm.require('soap'); 
      var options = { 
       ignoredNamespaces: { 
       namespaces: [], 
       override: true 
       } 
      } 
      var url = 'http://www.webservicex.com/globalweather.asmx?WSDL'; 
      Meteor.wrapAsync(soap.createClient(url, options,Meteor.bindEnvironment(function(err, client) { 
       if (err) 
       { 
        console.log("CREATE ERROR:"); 
        console.log(err); 
       } 
       else 
       { 
        Meteor.wrapAsync(Meteor.call("insertIntoTestData","test data",function(err,res) 
        { 
         if (err) 
         { 
          throw new Meteor.Error("server-error",error.message); 
         } 
         else 
         { 
          console.log('DATA: '); 
         } 
        })); 
       } 
      }))); 
     }, 
     insertIntoTestData: function(data) { 
      var userId = Meteor.userId(); 
      var user = Meteor.users.findOne({_id: userId}); 
      if (user) 
      { 
       return resultId = Meteor.users.update({_id:userId},{$set:{testData:data}}); 
      } 
     } 
    }); 
} 
+0

は、あなたには、同期するためにあなたの流星クライアントと流星サーバー間の非同期呼び出しを変更しようとしていますか? – zim

答えて

1

もしあなたがそのアプローチを働かせることができないのであれば、代替案を提供できるかもしれません。私が要求ライブラリとの同期呼び出しを必要とするとき、私はファイバー/将来のノードから将来​​のライブラリーを使用することによって異なるアプローチを使用しました。リクエストの後、私は "future.wait()"と内部の非同期コードコールバック "future.return(value)"を入れます。要求が終了して値が返されるまで、実行は待機します。 ここにこのリンクはうまくもそのアプローチの使用について説明します。https://themeteorchef.com/tutorials/synchronous-methods

敬具、

ディノ

+0

こんにちはディーノ、あなたのカンフーは強いです!私はあなたの提案を試みた。それは魅力のように働く。ありがとう、トン。 –

関連する問題