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

Я надеюсь, что правильно использовал Promises.

Теперь я назначаю функцию переменной в моем фоновом задании следующим образом.

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 Выполнено задание updateSoccerData2 с:
Ввод: {} Результат: TypeError: Не удается прочитать свойство Team1 неопределенного на e. (_other/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

Таким образом, кажется, что асинхронная функция не готова к выполнению назначения. Кто-нибудь может помочь? Благодарю вас!


person weka1    schedule 28.01.2016    source источник


Ответы (1)


Ваша функция выглядит нормально, но задание нужно изменить на:

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

потому что функция возвращает обещание, которого вы ждете, и конечным результатом этого обещания является ваш массив данных.

person Wain    schedule 28.01.2016
comment
Ах!! Теперь я понимаю. Функция then принимает возвращенное обещание в качестве параметра. Большое спасибо! - person weka1; 28.01.2016