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

标签 javascript node.js firebase google-cloud-functions

我有一个 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/

相关文章:

javascript - 我在类里面使用 promise 哪里出错了?

android - 如何从 Firebase 中检索随机子项

javascript - 转换 Unix 纪元中的 firebase 服务器时间戳

firebase - 将 Firebase SSL 托管用于两个不同的 Web 应用程序

javascript - 通过滑动或单击显示文件夹中的图像, slider 样式(一张一张),具有多个选择

javascript - 多次执行命令而不循环javascript

javascript - 显示多个API调用的结果

node.js - Qt 应用程序 - node.js 服务器通信

javascript - ngGrid 多列过滤

Javascript:使用 slice() 从数组中选择除一项以外的所有项?