Переписать код формы обратного вызова в Async Await - PullRequest
0 голосов
/ 28 июня 2018

Я пытался преобразовать свой существующий код Express JS из функции обратного вызова в Async Await. Код обратного вызова функции

app.get('/contactlist', (req, res) => {
  db.contactlist.find((err, docs) => {
    res.json(docs);
  });
});

А код асинхронного ожидания

app.get('/contactlist', async (req, res) => {
  db.contactlist.find(async(err, docs) => {
    res.json(await docs);
  });
});

Новый код работает хорошо, и у меня есть сильное чувство, что это неправильно. Реализация Async Await

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

вы вообще не конвертировали обратный вызов в асинхронное ожидание, обратный вызов все еще там. Правильная реализация будет выглядеть следующим образом

    app.get('/contactlist', async (req, res) => {
    const docs = await getContactList();
    res.json(docs)
});

function getContactList() {
    let promise = new promise(function(resolve, reject) {
        db.contactlist.find({}, function(err, results) {
            if (err)
                reject(err)
            else
                resolve(results)

        });
    });
    return promise
}

^ РЕДАКТИРОВАТЬ: Вот полный пример: если у вас есть настраиваемая функция против await, вы можете обещать эту функцию, создав и вернув обещание в этой функции

0 голосов
/ 28 июня 2018

Вы все еще используете обратные вызовы. Вы можете переключиться на async/await, только если API возвращает обещания. app.get() не возвращает обещания, поэтому с Express не работает следующее:

let (req, res) = await app.get('/contactlist');
try {
 let docs = await db.contactlist.find();
 res.json(docs);
} catch (err) {
  // Handle the error 
}

Все это должно быть внутри функции async.

Что такое db в вашем примере? Если db.contactlist.find возвращает обещание, вы можете использовать async/await следующим образом:

app.get('/contactlist', async (req, res) => {
  try {
   let docs = await db.contactlist.find();
   res.json(docs);
  } catch (err) {
    // Handle the error 
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...