Parse.com/CloudCode 承诺不太清楚



我被这个问题困住了,找不到答案。我在云代码中编写了以下函数。

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;
}

我希望我确实在这里以正确的方式使用了承诺。

现在,我将函数分配给后台作业中的变量,如下所示。

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 运行作业更新足球数据2
: 输入:{} 结果:类型错误:无法读取属性"Team1" 定义 在E. (_other/nunutest.js:28:48) 在 e.i (解析.js:14:27703) at e.a.value (Parse.js:14:27063) 在 e.i (解析.js:14:27830) at e.a.value (Parse.js:14:27063) 在对象。(:846:17)I2016-01-28T16:28:55.561Z]输入获取足球数据 I2016-01-28T16:28:56.920Z]只是一个日志:SV达姆施塔特98

因此,异步函数似乎在进行赋值时尚未准备就绪。有人可以帮忙吗?谢谢!

您的函数看起来不错,但作业需要更改为:

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);
    });
});

因为该函数返回您等待的承诺,而该承诺的最终结果是您的数据数组。

最新更新