(无服务器框架模块)在返回语句之前等待promise解析

时间:2015-11-16 00:04:43

标签: ecmascript-6 bluebird aws-lambda aws-api-gateway serverless-framework

无服务器框架模块是否有可能在返回之前等待“解析”承诺?

我知道承诺本身不能做到这一点,但不同的框架/库(expressJasminehapijs等)通过一个方法来解决这个问题。定义何时返回。我需要这样的东西:

let http = require('http'),
    Promise = require('bluebird');

let action = (done) => {
  return new Promise((resolve, reject) => {
    http
      .get('http://domain.com', resolve.bind({}, 'all good!'))
      .on('error', reject.bind({}, 'all wrong!'));
  })
  .then((response) => {
    console.log('Result', response);
    return done(response);  // <----------- I wan't to see this as the response
                            //              of the lambda function
  });
};

module.exports.run = (event, context, cb) => cb(null, action(done));

1 个答案:

答案 0 :(得分:1)

不,承诺不这样做。从未来读取是不可能的,也不希望(不能)阻止。您的操作仍然是异步的。

但是假设您的导出无论如何都需要回调,您可以简单地异步调用它:

module.exports.run = (event, context, cb) => {
    action().then(res => cb(null, res), err=>cb(err));
};

当然,如果您刚刚退回承诺,那会更好。