最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用promise的nodejs中的异步调用

运维笔记admin11浏览0评论

使用promise的nodejs中的异步调用

使用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转换为诺言返回函数。

发布评论

评论列表(0)

  1. 暂无评论