我遇到了这个问题但无法找到答案。我在Cloud Code中编写了以下函数。
function getSoccerData()
{
console.log("Entering getSoccerData");
var promise = Parse.Cloud.httpRequest({
url: 'http://www.openligadb.de/api/getmatchdata/bl1/2015/'
}).then(function(httpResponse) {
console.log("Just a Log: " + JSON.parse(httpResponse.buffer)[1].Team1.TeamName);
return JSON.parse(httpResponse.buffer);
});
return promise;
}
我希望我在这里以正确的方式使用Promise。
现在我将函数分配给后台作业中的变量,就像这样。
Parse.Cloud.job("updateSoccerData2", function (request, response) {
var matchArray
matchArray = getSoccerData().then(function() {
console.log("TestLog: " + matchArray[1].Team1.TeamName);
response.success("Success!");
}, function(error) {
response.error(error.message);
});
});
当我尝试运行时,我得到以下日志输出
E2016-01-28T16:28:55.501Z] v412 Ran job updateSoccerData2 with:
输入:{}结果:TypeError:无法读取属性' Team1'的 未定义 在e。 (_其他/ nunutest.js:28:48) 在e.i(Parse.js:14:27703) 在e.a.value(Parse.js:14:27063) 在e.i(Parse.js:14:27830) 在e.a.value(Parse.js:14:27063) 在对象。 (:846:17)I2016-01-28T16:28:55.561Z]输入getSoccerData I2016-01-28T16:28:56.920Z]只是一个日志:SV Darmstadt 98
因此,在进行赋值时,异步函数似乎还没有准备好。有人可以帮忙吗?谢谢!
答案 0 :(得分:3)
您的功能看起来不错,但作业需要更改为:
Parse.Cloud.job("updateSoccerData2", function (request, response) {
getSoccerData().then(function(matchArray) {
console.log("TestLog: " + matchArray[1].Team1.TeamName);
response.success("Success!");
}, function(error) {
response.error(error.message);
});
});
因为该函数返回您等待的承诺,该承诺的最终结果是您的数据数组。