AWS SDK文档并没有很清楚地说明何时/如何/是否可以将异步服务调用转换为同步。例如,此页面(https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/calling-services-asynchronously.html)说:
例如,这个调用是异步还是同步的?
describeInstances()返回后,我可以假设回调已经被调用了吗?如果没有,我该如何等待它被调用?
编辑:我尝试按照建议编写了一些async/await代码,但它不起作用:
这个脚本看起来没有完成任何承诺就退出了。
在Node.js中是否有可能获取异步函数/承诺的返回值?我正在思考这在Python中是多么简单。
SDK通过异步方式处理所有请求。
然后在这个页面(https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/using-a-callback-function.html)上说:当成功响应或错误数据返回时,此回调函数执行。如果方法调用成功,则响应内容在data参数中对回调函数可用。如果调用不成功,则提供有关失败的详细信息在error参数中。
但它没有说明如何等待该回调函数完成。例如,这个调用是异步还是同步的?
new AWS.EC2().describeInstances(function(error, data) {
if (error) {
console.log(error); // an error occurred
} else {
console.log(data); // request succeeded
}
});
describeInstances()返回后,我可以假设回调已经被调用了吗?如果没有,我该如何等待它被调用?
编辑:我尝试按照建议编写了一些async/await代码,但它不起作用:
var AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});
var s3 = new AWS.S3({apiVersion: '2006-03-01'});
let data = null;
r = s3.listBuckets({},function(e,d){
data = d;
})
p=r.promise();
console.log(">>1",p);
async function getVal(prom) {
ret = await prom;
return ret;
}
console.log(">>2",getVal(p));
我认为现在的情况是,我正在等待getVal()的结果,而getVal()正在等待Promise p的结果,然而这是最终的结果:
>>1 Promise { <pending> }
>>2 Promise { <pending> }
这个脚本看起来没有完成任何承诺就退出了。
在Node.js中是否有可能获取异步函数/承诺的返回值?我正在思考这在Python中是多么简单。