Javascript 我有一个接收结果的异步AWS.Request调用。如何返回包含另一个结果的承诺?

Javascript 我有一个接收结果的异步AWS.Request调用。如何返回包含另一个结果的承诺?,javascript,amazon-web-services,asynchronous,promise,callback,Javascript,Amazon Web Services,Asynchronous,Promise,Callback,我有一个执行异步请求的函数foo()。这将返回一个AWS.Request,我可以通过调用函数返回并处理该请求。这将使我能够访问AWS.Request回调收到的“数据”。我想做的是让调用者能够接收一些其他值,这取决于“数据”的值: 调用者的工作方式如下: var request = foo(); request.then(function(result) { console.log("result is:"); console.log(result); } “

我有一个执行异步请求的函数foo()。这将返回一个AWS.Request,我可以通过调用函数返回并处理该请求。这将使我能够访问AWS.Request回调收到的“数据”。我想做的是让调用者能够接收一些其他值,这取决于“数据”的值:

调用者的工作方式如下:

var request = foo();
request.then(function(result) {
    console.log("result is:");
    console.log(result);
}
result
”这是AWS请求返回的
foo()
中回调函数中“
data
”的值。我希望“
result
”的值为
newVal
null
,并且在
foo()中的回调完成时可用

我怎样才能做到这一点呢?

正如前面所说,答案是按照答案将现有回调API转换为承诺,我这样解决它:

function foo() {
    return new Promise(function(resolve, reject) {
                        awsrequest({'param1':val1, 'param2': val2}, 
                                   function(err, data) {
                                      var result = null;
                                      if (data == condition) {
                                         result = newVal;
                                      } 
                                      resolve(result);
                                  })
                         });
}

为什么要传递回调而不是调用请求的
.promise()
方法?解决方法是promisize它。
function foo() {
    return new Promise(function(resolve, reject) {
                        awsrequest({'param1':val1, 'param2': val2}, 
                                   function(err, data) {
                                      var result = null;
                                      if (data == condition) {
                                         result = newVal;
                                      } 
                                      resolve(result);
                                  })
                         });
}