Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在使用request()和callback时,如何不在Azure函数中调用context.done()两次?_Javascript_Azure_Azure Functions - Fatal编程技术网

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

Javascript 在使用request()和callback时,如何不在Azure函数中调用context.done()两次?,javascript,azure,azure-functions,Javascript,Azure,Azure Functions,我正在编写一个Azure函数,它使用npm模块请求调用Google API。处理body的回调需要调用context.done()或context.res超出范围(如果我在回调中设置它,然后通过context.done()在脚本末尾等待使用它) 问题是我不明白如何处理错误,如何向客户端返回响应,如何使用回调 欢迎对我的代码提出任何意见。我想提高 var request=require('request'); module.exports=函数(上下文,请求){ 如果(请求正文){ 传入=请求正文

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

问题是我不明白如何处理错误,如何向客户端返回响应,如何使用回调

欢迎对我的代码提出任何意见。我想提高

var request=require('request');
module.exports=函数(上下文,请求){
如果(请求正文){
传入=请求正文
if(incoming.components&&incoming.components.city
&&传入的.components.state
&&输入。组件。国家/地区){
//地点=城市
//行政区=州
var国家=传入的.components.country;
var administrative_area=incoming.components.state;
var locality=incoming.components.city;
请求({
url:“https://maps.googleapis.com/maps/api/geocode/json?components=country:US|地点:城市|行政区划:CA&key=…”
},函数(错误、响应、正文){
如果(错误){
日志(错误);
}
如果(!error&&response.statusCode==200){
context.log(正文)
}
context.res={
现状:200,
正文:“asdf”
};
context.done();
});
context.log(“此处”);
}否则{
context.res={
现状:400,
正文:“有数据,但不是正确的类型。请尝试{“组件”:{“国家”:“美国”、“城市”:“城市”、“州”:“CA”}”
};
}
}
否则{
context.res={
现状:400,
正文:未收到任何内容。请尝试{“组件”:{“国家”:“美国”、“城市”:“城市”、“州”:“CA”}
};
}
context.done();
};

您不应该在函数末尾调用
context.done()
。只有在得到结果时(即检测到错误或在回调内部)才调用它。函数的稍微重构和简化版本:

module.exports=函数(上下文,请求){
如果(!请求正文){
context.res={
现状:400,
正文:“未收到任何内容。请尝试{“国家”:“美国”}”
};
context.done();
返回;
}
如果(!请求正文国家/地区){
context.res={
现状:400,
正文:“有数据,但不是正确的类型。试试{“国家”:“美国”}”
};
context.done();
返回;
}        
请求({
url:“https://www.google.com?q=“+req.body.country
},函数(错误、响应、正文){
如果(错误){
日志(错误);
context.res={
现状:500,
正文:“意外错误”
};
}否则{
如果(response.statusCode==200){
context.log(正文)
}
context.res={
现状:200,
正文:“asdf”
};
}
context.done();
});
};

谢谢。这非常有意义。是吗?因为以这种方式生成错误在任何监控工具中都不会显示为错误。似乎没有一种方法可以同时生成错误并向用户返回自定义响应。Azure失败了。