2016-09-23 12 views
1

メテオコールバックで本当に苦労しています。私は、サーバー側のメソッドにクライアント側の呼び出しがありますが、コールバックがサーバーから戻ってくるとき、私は未定義の結果を取得します。私が知る限り、これはサーバーがPOSTを完了していないのに既にコールバックを送信しているためです。私は流星に新しいです、そして、これは本当に難しいようです。私がこれまで持っているもの:メテオールメソッド呼び出し - メソッドの完了を待ちます

クライアント:

Meteor.call("createCustomer", city, fname, lname, email, function(error, result) { 
    if (error) { 
    console.log("error: " + error); 
    } else { 
    console.log("result: " + result) 
    } 
}); 

サーバー:

Meteor.methods({ 
    'createCustomer': function(city, fname, lname, email) { 
    HTTP.call("POST", url+'/customer?api_key='+process.env.API_TOKEN ,{ 
     data: { 
     city: city, 
     first_name: fnam, 
     last_name: lname, 
     email: email 
     } 
    }, function (error, result) { 
     if (error) { 
     return 'error'; 
     } else { 
     return'success'; 
     } 
    }); 
    } 
}); 

私は本当に愚かな何かをやっているかもしれない、または私が予想していた以上に複雑かもしれませんが、任意のヘルプ長い道のりを行くだろう!

答えて

1

これはMeteor.wrapAsyncが対象です。非同期関数の同期バージョンを作成します。試してみてください:

'createCustomer': function(city, fname, lname, email) { 
    var call = Meteor.wrapAsync(HTTP.call, HTTP); 
    return call("POST", url+'/customer?api_key='+process.env.API_TOKEN ,{ 
    data: { 
     city: city, 
     first_name: fname, 
     last_name: lname, 
     email: email 
    } 
    }); 
} 
+0

ありがとう、非同期でそれをワープする必要は実際にはありません@PsydeStep魅力 – PsydeStep

+0

のように動作します。 'asyncCallback'を渡さないと、' HTTP.call'が同期して実行されます。 ['asyncCallback'の説明を読んでください。](https://docs.meteor.com/api/http.html#HTTP-call) –

+0

@RamilMuratov洞察力に感謝します。これはWaiskiのやり方がうまく機能していると考えて、これを行う正しい方法です。 – PsydeStep

0

拡大元のコメントを拡大してください。

コールバックを渡さないとサーバー上でHTTP.callが同期して実行され、Meteor.wrapAsyncを使用する必要はありません。

Meteor.methods({ 
    createCustomer(city, first_name, last_name, email) { 
    return HTTP.post(`${url}/customer?api_key=${process.env.API_TOKEN}`, { 
     data: { city, first_name, last_name, email } 
    }); 
    } 
}); 
関連する問題