异步/等待功能推送不起作用

时间:2019-02-24 17:49:48

标签: javascript node.js node-postgres

我对async - await有疑问。

发生了什么事?

我有一个回调函数,它会向其他函数发送一个对象数组,其中包含有效对象和无效对象。

在函数中,我进行验证(如果有效),然后执行push将其保存在数组中。

当所有对象均有效时,我想将其传递给另一个函数。但是它一次通过而不是全部通过。

有人可以帮助我吗?

我调用回调函数传递对象数组是否有效的函数:

const getNewNotification = async (callback) => {
  await pool.query('SELECT * from alerts', (err, res) => {
    if (err) {
      console.log(err)
    } else {
      const newsNotification = res.rows;
      callback(newsNotification)
    }
  })
}

我做push的功能:

const sendNotification = async (notification, callback) => {
  let domain;
  let subdomain;
  let name;
  let userHistory;
  let userDescription;
  let sequenceHistory;

  let personYes = [];

  let person;
  await notification.map(async (user) => {
    // VERIFY IF THE OBJECT IS VALID
    await pool.query(`SELECT * from wfm where mail = '${user.id}''`, async (err, res) => {
      if (res.rows.length !== 0) {
        person = {
          domain: res.rows[0].domain_name,
          subdomain: res.rows[0].subdomain_name,
          name: res.rows[0].name,
          userHistory: user.id,
          userDescription: user.change_description,
          sequenceHistory: user.sequence,
        }
  
  // MAKE THE PUSH...
        await personYes.push(person);
callback2(personYes);
      }

基本上,我希望函数sendNotification仅在结束时发送数据,我该怎么做?

1 个答案:

答案 0 :(得分:2)

我认为这是因为您正在混合两件事,要么使用不带await语句的回调方法,要么正确使用Promise。您可以使用-

对其进行修复

代替这个

await pool.query(`SELECT * from wfm where mail = '${user.id}''`, async (err, res) => {

});

您应该使用-

let response = await pool.query(`SELECT * from wfm where mail = '${user.id}'`)

您的回调代码可以放在底部。

有关更多详细信息,请参阅-https://node-postgres.com/guides/async-express