Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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 我们可以在firebase中使用async/await in cloud函数吗?_Javascript_Node.js_Firebase_Google Cloud Functions - Fatal编程技术网

Javascript 我们可以在firebase中使用async/await in cloud函数吗?

Javascript 我们可以在firebase中使用async/await in cloud函数吗?,javascript,node.js,firebase,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Functions,我必须创建名为getMatchDataApi()和saveApiDataToDb()的函数。getMatchDataApi()函数从api返回值,saveApiDataToDb()函数用于将getMatchDataApi()值存储到firestore数据库中 function getMatchDataApi() { var options = { method: "GET", hostname: "dev132-cricket-live-scores-v1.p.rapidap

我必须创建名为getMatchDataApi()和saveApiDataToDb()的函数。getMatchDataApi()函数从api返回值,saveApiDataToDb()函数用于将getMatchDataApi()值存储到firestore数据库中

function getMatchDataApi() {
  var options = {
    method: "GET",
    hostname: "dev132-cricket-live-scores-v1.p.rapidapi.com",
    port: null,
    path: "/scorecards.php?seriesid=2141&matchid=43431",
    headers: {
      "x-rapidapi-host": "dev132-cricket-live-scores-v1.p.rapidapi.com",
      "x-rapidapi-key": "63e55e4f7fmsh8711fb1c0bd9ec2p1d8b4bjsne2b8db0a1a82"
    },
    json: true
  };
  var req = http.request(options, res => {
    var chunks = [];

    res.on("data", chunk => {
      chunks.push(chunk);
    });

    res.on("end", () => {
      var body = Buffer.concat(chunks);
      var json = JSON.parse(body);
      playerName = json.fullScorecardAwards.manOfTheMatchName;
      console.log("player name", playerName);
    });
  });
  req.end();
}
这里我使用的是异步函数。因此,我希望它首先执行getMatchDataApi()并返回值,然后在函数saveApiDataToDb()中打印值。 然后我调用saveApiDataToDb(),如下所示:

exports.storeMatchData = functions.https.onRequest((request, response) => {
   saveApiDataToDb()
});

是的,您可以在云中使用async/await函数。但是,在Spark计划(免费计划)中,您无法访问/获取google服务器之外的数据。 希望这有帮助

按如下方式修改
函数/index.js
文件:

const functions=require('firebase-functions');
const request=require('request');
exports.storeMatchData=functions.https.onRequest(异步(req,res)=>{
让body='';
等待getMatchDataApi();
如果(!正文){
返回res.status(404.end('无法获取应用程序数据:/');
}
//让json=json.parse(body);
//playerName=json.fullScorecardAwards.manOfTheMatchName;
//console.log(“Aman Singh”,playerName);
决议(正文);
});
函数getMatchDataApi(){
常量选项={
网址:'https://dev132-cricket-live-scores-v1.p.rapidapi.com/scorecards.php?seriesid=2141&matchid=43431',
标题:{
“x-rapidapi-host”:“dev132-cricket-live-scores-v1.p.rapidapi.com”,
“x-rapidapi-key”:“63E55E4F7FMSH8711FB1C0BD9EC2P1D8BJSNE2B8DB0A1A82”
},
};
返回旋度(选项);
}
函数cURL(obj,输出='body'){
返回新承诺((解决、拒绝)=>{
请求(obj,(错误、响应、正文)=>{
如果(错误)
拒绝(错误);
否则如果(response.statusCode!=200)
拒绝(`cURL Error:${response.statusCode}${response.statusMessage}`);
else if(response.headers['content-type'].match(/json/i)&&output=='body')
解析(JSON.parse(body));
else if(输出='body')
决议(机构);
其他的
决心(回应);
});
});
}

我尝试使用云函数中的promise解决我的问题。所以它可以帮助别人。 这是我的云功能

exports.storeMatchData = functions.https.onRequest((request, response) => {
  a().then(
    result => {
      saveApiDataToDb(result);
    },
    error => {}
  );
});
这就是我调用api并首先解析其数据的函数

var options = {
  method: "GET",
  hostname: "dev132-cricket-live-scores-v1.p.rapidapi.com",
  port: null,
  path: "/scorecards.php?seriesid=2141&matchid=43431",
  headers: {
    "x-rapidapi-host": "dev132-cricket-live-scores-v1.p.rapidapi.com",
    "x-rapidapi-key": "63e55e4f7fmsh8711fb1c0bd9ec2p1d8b4bjsne2b8db0a1a82"
  },
  json: true
};

var options1 = {
  method: "GET",
  hostname: "dev132-cricket-live-scores-v1.p.rapidapi.com",
  port: null,
  path: "/matches.php?completedlimit=5&inprogresslimit=5&upcomingLimit=5",
  headers: {
    "x-rapidapi-host": "dev132-cricket-live-scores-v1.p.rapidapi.com",
    "x-rapidapi-key": "63e55e4f7fmsh8711fb1c0bd9ec2p1d8b4bjsne2b8db0a1a82"
  }
};

var a = function getMatchDataApi() {
  // Return new promise
  return new Promise((resolve, reject) => {
    // Do async job

    let firstTask = new Promise((resolve, reject) => {
      var req = http.request(options, res => {
        var chunks = [];
        var arr = [];

        res.on("data", chunk => {
          chunks.push(chunk);
        });

        res.on("end", () => {
          var body = Buffer.concat(chunks);
          var json = JSON.parse(body);
          const playerName = json.fullScorecardAwards.manOfTheMatchName;
          resolve(playerName);
        });
      });
      req.end();
    });

    let secondTask = new Promise((resolve, reject) => {
      var req = http.request(options1, res => {
        var chunks = [];
        var arr = [];

        res.on("data", chunk => {
          chunks.push(chunk);
        });

        res.on("end", () => {
          var body = Buffer.concat(chunks);
          var json = JSON.parse(body);
          const playerName = json;
          resolve(playerName);
        });
      });
      req.end();
    });

    Promise.all([firstTask, secondTask]).then(
      result => {
        resolve(result);
      },
      error => {
        reject(error);
      }
    );
  });

};
在这个函数中解析后,我将在其中使用getMatchDataApi()值

function saveApiDataToDb(data) {
  console.log("Name of player", data[0]);
}

我不熟悉firebase中的云功能。请帮助任何人。提前感谢
getMatchDataApi
没有返回任何承诺,因此您不能等待。还有,
playerName
是一个全局变量吗?您的函数应该返回一个承诺,该承诺在所有异步工作完成时解析。我有一个燃烧计划。所以我如何在上面提到的代码中使用async/await。getMatchDataApi()此函数应首先运行并返回“playerName”值2。saveApiDataToDb()然后执行此函数以将“playerName”值存储到我的数据库中。所以我必须使用异步/等待函数。所以我不知道如何使用它?在这种情况下,您必须在
getMatchDataApi()
函数中使用承诺。更好的选择或奖励:我仔细阅读了这些函数示例和您提供的链接。你能帮我写一下如何在上面的代码中使用promise或async/await吗。这真的会有帮助。非常感谢。
function saveApiDataToDb(data) {
  console.log("Name of player", data[0]);
}