gpt4 book ai didi

javascript - Firebase http 函数在 http 请求库返回数据之前完成

转载 作者:行者123 更新时间:2023-12-01 01:55:12 25 4
gpt4 key购买 nike

我有一个 HTTP 触发的 Firebase 函数,它使用请求库 https://github.com/request/request向另一个 API 发送 HTTP post。日志显示 POST 请求正在返回正确的数据,但 Firebase 函数在异步 POST 返回数据之前已完成。如何让整体功能等待POST请求?

const functions = require('firebase-functions');
var requestDependency = require('request');

exports.XXXXXXXXXX = functions.https.onRequest((request, response) => {

var answer = 'testo';
var jsonResponse = null;
var jsonData = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
let url = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; //or production

requestDependency.post({

headers: {
'content-type': 'XXXXXXXXXXXXXXXXXXXX' ,
'Accept': 'XXXXXXXXXXXXXXXXXXXX',
'XXXXXXXXXX-Access-Token': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
},

url: url,
body: jsonData

}, function(error, response, body) {

if (error) {
console.log('errrrrrrrror1')
} else {
jsonResponse = body;
console.log(jsonResponse); <-----Shows correct data returned
console.log('Done.');
answer = jsonResponse;
console.log('TEST: ' + answer)
}
});

console.log("Performing search");
response.send(cardName+" "+jsonResponse); <---jsonResponse not populated
});

最佳答案

根据documentation ,当响应发送到客户端时,HTTP 函数将终止。这意味着您对response.send() 的调用实际上终止了该函数。

问题是对 post() 的调用是异步的,并且会立即返回,而 HTTP 请求在后台继续进行。函数执行在发布后立即继续。这意味着您发送的响应几乎肯定会在 HTTP 请求完成之前得到执行。

如果您想等待 HTTP 请求完成,请将对客户端的响应放在处理 HTTP 请求响应的回调中。

function(error, response, body) { 
if (error) {
console.log('errrrrrrrror1')
// send an error response here
} else {
jsonResponse = body;
console.log(jsonResponse); <-----Shows correct data returned
console.log('Done.');
answer = jsonResponse;
console.log('TEST: ' + answer)
// send an success response here
}
});

另请观看此视频系列,以更好地了解 Cloud Functions 的工作原理:https://www.youtube.com/watch?v=7IkUgCLr5oA&index=2&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM

关于javascript - Firebase http 函数在 http 请求库返回数据之前完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51090004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com