私が達成しようとしているかの簡単な概要:AJAXコールが(「app.js」に)サーバー上の特定のURLへ 高速ルーティングと非同期コード - 非同期コードの結果を送信するにはどうすればよいですか?
- その後、ノードを実行します 「Send.js」
- 「Send.js」の出力内の.jsコードが「res.send」方法とAJAX要求に対する応答として使用されます。
私の問題は、「Send.jsは」非同期メソッドを使用するということですので、場合の応答、私は「res.send(応答)」に戻すようにしようとしています「応答」変数が定義されていません非同期コードが行う前に、 "Send.js"内の "sendOn"関数が完了するので、自然に送信されます。
コールバックを使用すると解決策が得られる可能性があるので、レスポンスが定義されるまで「res.send(response)」が呼び出されないように、私はそれを実装する方法を知らない(簡体字)
app.js:ここに二つの別々のファイル
var send = require("./Files/Other/Send.js");
app.post('/Lamp-On', function (req, res)
{
var response = send.sendOn();
res.send(response);
});
Send.js(簡体字):
client.openとclient.sendEventは、コールバックなどを受け入れ、両方の非同期メソッドです最終的な引数であり、外部SDKの一部です。
var sendMessage = function()
{
var data = "on";
var message = new Message(data);
message.properties.add('Turn On');
console.log('Sending message to turn the lamp: ' + message.getData());
client.sendEvent(message, printResultFor('Message'));
};
var connectCallback = function() {
if (err) {
console.error('Could not connect: ' + err.message);
}
else {
console.log('Client connected');
client.on('message', function (msg) {
console.log('Id: ' + msg.messageId + ' Body: ' + msg.data);
client.complete(msg, printResultFor('completed'));
// reject and abandon follow the same pattern.
// /!\ reject and abandon are not available with MQTT
});
client.on('error', function (err) {
console.error(err.message);
});
client.on('disconnect', function() {
clearInterval(sendInterval);
client.removeAllListeners();
client.connect(connectCallback);
});
// Now call the sendMessage function.
sendMessage();
}
};
var sendOn = function() {
client.open(connectCallback);
return
};
// Helper function to print results in the console
function printResultFor(op) {
return function printResult(err, res) {
if (err !== null) {
console.log(op + ' error: ' + err.toString());
console.log(err);
}
if (res) {
console.log(op + ' status: ' + res.constructor.name);
};
};
}
exports.sendOn = sendOn;
非常に多くの非同期コールバックを処理する方法はありません。
最後の注意:私はどちらの提示も、誰もがちょうど私のためにこれを行うことを期待していますが、私は事前に、あなたは正しい方向に私を指すことができ感謝を願っています。
私の助言は、[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)を使用して非同期呼び出しを処理することです。 –
'async'モジュールを使用してこの問題を回避することをお勧めします。' https://github.com()/caolan/async' – abdulbarik