使用promise的nodejs中的异步调用
我需要使用php发送批量短信,所以nodejs与套接字连接,我正在使用套接字发送数据到nodejs来发送批量短信,并以发送项目所需的结果表示发送成功或不成功的短信数量数组中的响应,然后我将数组发送给客户端以进行进一步计算,但是问题是nodejs工作同步,因此我使用promise来异步执行此工作,但获取数组null
function getData(smsDetails) {
var results = [];
var sendLocalSmsPromis = new Promise(function (resolve, reject) {
for (var a = 0; a < smsDetails.data.contacts.length; a++) {
var contact = smsDetails.data.contacts[a].phone;
var dialCode = contact.substring(0, 2);
if (dialCode == 92) {
localSms(smsDetails.data.message, contact, smsDetails.data.senderId.name, function (response) {
if (responseinalResponse.Data.hasOwnProperty("id")) {
//sent successfully
} else {
var smsLength = generalHelper.calculateSmsLength(response.message);
var sentItemsData = {
user_id: smsDetails.data.user_id,
number: response.contact,
message: response.message,
length: smsLength,
status: 0,
type: 'portal',
date: moment().format("YYYY-MM-DD HH:ss:mm")
};
results.push(sentItemsData);
}
});
}
}
resolve(results);
});
return sendLocalSmsPromis;
}
socket.on("sendSms", function (smsDetails) {
var data = getData(smsDetails);
data.then(function (response) {
console.log(response);
// socket.emit("smsResponse",response);
}, function (err) {
console.log(err)
});
});
回答如下:localSms
函数是异步的,而for循环是同步的。将您的localSms
转换为诺言返回函数。