Javascript 我们可以在firebase中使用async/await in cloud函数吗?
我必须创建名为getMatchDataApi()和saveApiDataToDb()的函数。getMatchDataApi()函数从api返回值,saveApiDataToDb()函数用于将getMatchDataApi()值存储到firestore数据库中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
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]);
}