从异步调用中获取价值

时间:2019-09-10 17:26:08

标签: javascript node.js aws-lambda

我在AWS Lambda函数中使用AWS Service IotData,所以我使用AWS开发工具包,在构造IotData服务时IotData服务需要提供一个Iot端点配置参数,因此我使用另一个服务来获取端点,即代码如下。

const AWS = require('aws-sdk');
const iot = new AWS.Iot();
const endpoint = iot.describeEndpoint(
{
    endpointType: 'iot:Data-ATS'
}).promise();

const iotdata = new AWS.IotData({endpoint:endpoint});

exports.handler = async (event, context, callback) =>
{
    // code goes here...
}

我试图使用物联网函数describeEndpoint获取端点,并将值分配给变量endpoint

我知道它将失败,因为变量endpoint将获得一个Promise对象。因此,我尝试了异步IIFE来获取端点:

const endpoint = (async () => {
    let result = await iot.describeEndpoint(
    {
        endpointType: 'iot:Data-ATS' 
    }).promise();
    return result;
})();

但是,它也得到了promise对象。

还有其他解决方案可以从异步调用中获取价值吗?

PS之所以这样问,是因为我试图将变量endpointiotdata放在顶层,因为我担心这些变量可能会被其他函数使用。

1 个答案:

答案 0 :(得分:0)

您需要在需要端点的级别中等待。

类似:(未经测试)

    const getEndpoint = async () => {
        let edp = await iot.describeEnspoint(
             {endpointType: 'iot:Data-ATS'})
             .promise();
        return edp.endpointAddress;
        };

...
    let iotDataEndpoint = await getEndpoint();
    let iotData = new AWS.IotData({endpoint: iotDataEndpoint});

您不能将iotData设置为顶级 const (除非您对端点进行硬编码),因为在创建它之前必须先等待describeEndpoint调用返回。