Google Distance不适用于异步等待

问题描述 投票:0回答:1

我正在尝试使用node的google-distance包来计算两个城市之间的距离,并且一旦将该距离存储在mongodb数据库中,则将其放置在表单中的其他字段旁边。我发现的问题是我不知道如何返回该函数的值以将其存储在数据库中,并且它始终返回未定义的值。有人知道我会失败吗?

removalsCtrl.createRemoval = async (req, res) => {
    const { name, email, origin, destination } = req.body;

    let kilometers = await distance.get({ origin, destination }, function (err, data) {
        if (err) return console.log(err);
        return data.distanceValue;

    })

    const newRemoval = await new Removal({
        name,
        email,
        origin,
        destination,
        kilometers
    })

    await newRemoval.save();
    res.json({ message: 'Removal Saved' })
};
node.js async-await google-distancematrix-api
1个回答
0
投票

distance.get不返回Promise,因此您需要将其包装在具有此功能的函数中,或者将其余代码移到回调内,即

removalsCtrl.createRemoval = async (req, res) => {
  const {
    name,
    email,
    origin,
    destination
  } = req.body;

  const getKilometers = (origin, destination) => {
    return new Promise((resolve, reject) => {
      distance.get({ origin, destination }, function(err, data) {
        return err ? reject(err) : resolve(data);
      })
    })
  }

  // Be sure to handle failures with this, or however you decide to do it
  const kilometers = await getKilometers(origin, destination);

  const newRemoval = await new Removal({
    name,
    email,
    origin,
    destination,
    kilometers
  })

  await newRemoval.save();
  res.json({
    message: 'Removal Saved'
  })
};

© www.soinside.com 2019 - 2024. All rights reserved.