1

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

我知道 promise 本身无法做到这一点,但是不同的框架/库(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));
4

1 回答 1

2

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

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

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

当然,如果您只是返回承诺会更好。

于 2015-11-16T00:17:07.780 回答