Problem resolved on this Topic
の関数で生成された配列を取得し、箱の外に渡し私はaccountNumbers
に[]
結果を得るが、if (success) {
文の配列に成功したが作成され、accountNumbers
配列の中に押し込まsocket.emit('syncContacts', accountNumbers)
で、クライアント内は非同期iは<code>checkUserMobileNumberAsEwallet</code>関数にjsonArrayなどの単純なアレイを生成することができるが、私はそれからそれを通過できない(解決された)コード下これに
を送信
socket.on('syncContacts', function (data) {
var accountNumbers = [];
for (var i = 0; i < data.length; i++) {
checkUserMobileNumberAsEwallet(data[i].mobileNumber, function (success) {
if (success) {
accountNumbers.push({ewalletNumber: this.mobileNumber});
console.log(accountNumbers);
}
}.bind({mobileNumber: data[i].mobileNumber}));
}
console.log(accountNumbers);
socket.emit('syncContacts', accountNumbers);
});
function checkUserMobileNumberAsEwallet(mobileNumber, callback) {
var mobileNumber = mobileNumber.substr(1, mobileNumber.length);
var query = "SELECT id FROM userEwallets WHERE ewalletNumber LIKE '%" + mobileNumber + "'";
connection.query(query, function (err, results) {
if (err) return callback(false);
if (results.length === 0)
return callback(false);
else {
return callback(true);
}
});
}
はポストのコメントの後に更新:checkUserMobileNumberAsEwallet
は、関数コールバックを受け入れる非同期イベント、であるように私たちのコードに基づいて
socket.on('syncContacts', function (data) {
//console.log(accountNumbers);
//socket.emit('syncContacts', accountNumbers);
async.parallel(
[
function (callback) {
var accountNumbers = [];
for (var i = 0; i < data.length; i++) {
checkUserMobileNumberAsEwallet(data[i].mobileNumber, function (success) {
if (success) {
accountNumbers.push({ewalletNumber: this.mobileNumber});
console.log(accountNumbers);
}
}.bind({mobileNumber: data[i].mobileNumber}));
}
callback(success, accountNumbers);
}
],
function (success, results) {
console.log("results " + results.toString());
socket.emit('syncContacts', results);
});
});
function checkUserMobileNumberAsEwallet(mobileNumber, callback) {
var mobileNumber = mobileNumber.substr(1, mobileNumber.length);
var query = "SELECT id FROM userEwallets WHERE ewalletNumber LIKE '%" + mobileNumber + "'";
connection.query(query, function (err, results) {
if (err) return callback(false);
if (results.length === 0)
return callback(false);
else {
return callback(true);
}
});
}
私はあなたが使用しているものソケットライブラリわからないんだけど、しかし '.emit'で送られたデータは文字列でなければならないのでしょうか? – Whothehellisthat
@JoseRojasいいえ、私は何もエラーが発生しません、コードはうまく動作しますが、配列に項目をプッシュすると、機能が無効になります。 –
@Whothehellisthatの問題は配列の内容で、送信するにはnullが返されます –