2016-10-21 22 views
0

在我的服务器应用程序我有一些方法,例如:的NodeJS返回异步导致作为数组

  1. 插入件消息,当用户连接到应用程序(insertUserJoinedMessageAndSendMessage
  2. 获得所有者移动电话号码的唯一id(getOwnerPhoneNumberUniqueIds
  3. 打印生成的数据

在该溶液中我有:

insertUserJoinedMessageAndSendMessage(userPhoneNumbers, assignedUserId.id) 
    .then(function (t) { 
     return getOwnerPhoneNumberUniqueIds(userPhoneNumbers); 
    }) 
    .then(function (result) { 
     log.info(result); 
    }) 
    .catch(function (error) { 
     log.info(error); 
    }); 

方法,insertUserJoinedMessageAndSendMessage方法做工精细,没有任何问题,我想从getOwnerPhoneNumberUniqueIds()无极功能得到嵌套的承诺产生的数据作为getUserId(),但log.info(result);我不能在这部分代码打印数据,因为我不能从getOwnerPhoneNumberUniqueIds()

function insertUserJoinedMessageAndSendMessage(userPhoneNumbers, ownerUserId) { 
    return new Promise(function (resolve, reject) { 
     let query = "INSERT INTO `userJoinedMobileNumbers` (`id`, `userId`, `nameAndFamily`, `mobileNumber`, `created_at`, `updated_at`) VALUES "; 
     userPhoneNumbers.map(function (curr) { 
      query += "(NULL, " + ownerUserId + ", " + curr.contactName + ", " + curr.contactPhone + ", CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),"; 
     }); 
     query = query.substr(0, query.length - 1) + ";"; 
     connection.query(query, function (err, results) { 
      if (err) return reject(err); 
      resolve(true); 
     }); 
    }); 
} 

function getOwnerPhoneNumberUniqueIds(data) { 
    return Promise.all(data.map(function (curr) { 
     return getUserId(curr.contactPhone) 
      .then(function (data) { 
       log.info("1) " + data); 
       return {id: data}; 
      }); 
    })).then(function (accountNumbers) { 
     log.info("2) " + accountNumbers); 
     return accountNumbers 
    }).catch(function (err) { 
     console.log(err); 
    }); 
} 

function getUserId(contactPhone) { 
    return new Promise(function (resolve, reject) { 
     var query = "SELECT id FROM sendMessageUserJoined WHERE `phoneNumber` ='" + contactPhone + "'"; 

     connection.query(query, function (err, results) { 
      if (err) return reject(err); 

      if (results.length > 0) { 
       log.info("0) " + results[0].id); 
       resolve(results[0].id); 
      } 
     }); 
    }); 
} 

log.info("0) " + results[0].id);返回数组我得到的SQL命令并返回结果id成功的getOwnerPhoneNumberUniqueIds(),我可以打印与这部分代码为log.info("1) " + data);造成的,现在,我怎么返回上:

.then(function (accountNumbers) { 
    log.info("2) " + accountNumbers); 
    return accountNumbers 
}) 

log.info("2) " + accountNumbers);

不其返回的return {id: data};

+0

'查询+ = “(NULL,” + ownerUserId + “ ”+ curr.contactName +“, ”+ curr.contactPhone +“,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP),”;'SQL注入尖叫我。请考虑使用适当的SQL库来为您处理。 – kouak

+0

@kouak这是不重要的,当我不能返回结果父,没有问题 –

回答

1

的问题是在getUserId打印结果。

在某些情况下,您不会解决或拒绝承诺。所以你的Promise.all返回的承诺保持悬而未决。

function getUserId(contactPhone) { 
    return new Promise(function (resolve, reject) { 
     var query = "SELECT id FROM sendMessageUserJoined WHERE `phoneNumber` ='" + contactPhone + "'"; 

     connection.query(query, function (err, results) { 
      if (err) return reject(err); 

      if (results.length > 0) { 
       log.info("0) " + results[0].id); 
       resolve(results[0].id); 
      } 
      else { //this part is missing 
       resolve(); //or reject 
      } 
     }); 
    }); 
} 
+0

我不明白你的意思是什么,因为我得到了返回的结果,并用'log.info(“1)”+数据打印);'你能修复我的代码吗? –

+0

@mahdipishguy我更新了我的答案 –