使用request()和callback时,如何在Azure Function中调用context.done()两次?

时间:2017-06-23 06:28:15

标签: javascript azure azure-functions

我正在编写一个Azure功能,使用npm模块请求调用Google API。处理body需要调用context.done()或者context.res的回调超出范围(如果我在回调中设置它,然后等待我在脚本末尾通过{ {1}})。

问题是我不了解如何处理错误并将响应返回给客户端使用回调。

欢迎对我的代码发表任何评论。我想改进。

context.done()

1 个答案:

答案 0 :(得分:3)

在功能结束时,您不应该致电context.done()。只有在得到结果时才会调用它(即当您检测到错误或在回调中时)。您的函数的一点重构和简化版本:

module.exports = function (context, req) {
    if (!req.body) {
        context.res = {
            status: 400,
            body: 'Nothing was received. Try {"country": "US"}'
        };
        context.done();
        return;
    }

    if (!req.body.country) {
        context.res = {
            status: 400,
            body: 'There was data but not the right kind. Try {"country": "US"}'
        };
        context.done();
        return;
    }        

    request.get({
        url: "https://www.google.com?q=" + req.body.country
    }, function (error, response, body) {
        if (error) {
            context.log(error);
            context.res = {
                status: 500,
                body: "Unexpected error"
            };
        } else {
            if (response.statusCode == 200) {
                context.log(body)
            }
            context.res = {
                status: 200,
                body: "asdf"
            };
        }
        context.done();
    });
};