Как получить результат от другого Promise с асинхронным ожиданием? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь работать с безсерверным фреймворком, сейчас у меня есть 2 файла:

  1. server.js => обрабатывать соединение с monggoDB
  2. handler.js => это будет обрабатывать функции от безсерверной инфраструктуры до лямбды

Я хочу сначала получить результат из server.js, а затем выполнить следующий шаг.

Я пытаюсь использовать await dan для сохранения результата в переменной, процесс в handler.js будет работать синхронно, но результат startServer () не определен

// server.js
const mongoose = require('mongoose');
const dbHost = require('../config/keys').mongoURI;

module.exports = async () => {
  mongoose.Promise = global.Promise;
  mongoose.set('useFindAndModify', false);

  return await mongoose
    .connect(
      dbHost,
      { useNewUrlParser: true }
    )
    .then(res => {
      console.log('MongoDB Connected', res);
      return res;
    })
    .catch(err => {
      console.error(err);
      console.error('MongoDB Not Connected');
      return err;
    });
};

// handler.js
const startServer = require('./db/server');
module.exports.hello = async (event, context) => {
  let tryConnect = await startServer();
  console.log('server is running', tryConnect);
  return { statusCode: 200, body: JSON.stringify(tryConnect) };
};

как правильно получить результат от await из вложенного async-await?

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Нет необходимости в функции обратного вызова на mongoose.connect, если вы используете await. Функция обратного вызова используется для Promise, а не для await, используйте try/catch в async/await.

// server.js
const mongoose = require('mongoose');
const dbHost = require('../config/keys').mongoURI;

module.exports = async () => {
    mongoose.Promise = global.Promise;
    mongoose.set('useFindAndModify', false);

    return await mongoose
        .connect(
            dbHost, {
                useNewUrlParser: true
            }
        );
};

// handler.js
const startServer = require('./db/server');
module.exports.hello = async (event, context) => {
    let tryConnect = {};
    try {
        tryConnect = await startServer();
        console.log('MongoDB Connected', tryConnect);
    } catch (err) {
        console.error(err);
        console.error('MongoDB Not Connected');
    }
    console.log('server is running', tryConnect);
    return {
        statusCode: 200,
        body: JSON.stringify(tryConnect)
    };
};
0 голосов
/ 08 января 2019

Возможно, вы просто можете вернуть значение, которое вы получите после await:

try {
    const res = await mongoose.connect(dbHost, { useNewUrlParser: true });
    console.log('MongoDB Connected', res);
    return res;
} catch (error) {
    console.error(err);
    console.error('MongoDB Not Connected');
    return err;
}
...