繁体   English   中英

如何通过异步等待从其他Promise获取结果?

[英]How to get the result from other Promise with async await?

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

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

我想先从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) };
};

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

谢谢

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

目前在没有必要的回调函数的mongoose.connect如果您使用await 回调函数用于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) }; }; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM