【问题标题】:How to get the result from other Promise with async await?如何通过异步等待从其他 Promise 中获取结果?
【发布时间】:2019-01-08 17:03:57
【问题描述】:

我尝试使用无服务器框架,现在我有 2 个文件:

  1. server.js => 处理与 monggoDB 的连接
  2. handler.js => 这将处理从无服务器框架到 lambda 的函数

我想先从 server.js 获取结果,然后再运行下一步。

我正在尝试使用 await 将结果保存到变量中, 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) };
};

如何从嵌套的 async-await 中正确获取 await 的结果?

谢谢

【问题讨论】:

    标签: javascript async-await es6-promise serverless-framework


    【解决方案1】:

    你可能只返回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;
    }
    

    【讨论】:

      【解决方案2】:

      如果您使用await,则mongoose.connect 上不需要回调函数。回调函数用于Promise 而不是await,在async/await 中使用try/catch

      // 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)
          };
      };

      【讨论】:

        猜你喜欢
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-04
        • 1970-01-01
        相关资源
        最近更新 更多