Опираясь на свою собственный вызов функции через внешний интерфейс не очень хорошая практика.
Теперь, когда вы поняли, что вы будете нуждаться в один и тот же код для различных целей, вы должны взять время, чтобы реорганизовать свой код таким образом, что вам не нужно вызывать 'http'
обработчик через Parse.Cloud.run()
:
function doHttp(params) {
// original implementation here
}
Parse.Cloud.define('http', function(request, response) {
doHttp(request.params)
.then(response.success)
.fail(response.error);
}
Parse.Cloud.define('count', function(request, response)) {
var query = new Parse.Query('MyS');
query.equalTo("Notify", true);
query.notEqualTo ("MainEventCode", '5');
query.find()
.then(doHttp) // doHttp will receive the results from `query` as its parameter
.then(function(httpResponses) {
// httpResponses is an array-like object as per the other question:
httpResponses = Array.prototype.slice.call(httpResponses);
httpResponses.forEach(function (response) {
console.log('httpResponse is : ' + response.length);
});
}).fail(response.error);
}
Я принял взглянуть на другой вопрос, и насколько реализация count
идет, я полагаю, вы пропустили точку, что 'http'
возвращается arguments
, который только Array-like object.
Это должно быть хорошо, если Parse.Cloud.run
запускает вашу функцию на другой виртуальной машине, но это странное поведение является еще одним симптомом не рефакторинга и повторного использования кода через внешний вызов (HTTP-запрос внутри их инфраструктуры с передачей JSON! может значительно снизить производительность и подсчитать ваши запросы/вторую квоту). Если Parse вместо этого делает какую-то магию, чтобы вызвать вашу функцию напрямую, как если бы она была определена в одной и той же среде, у вас будут проблемы с тем, что она не является фактическим Array
.
Вы должны изменить эту функцию, чтобы вернуть правильный массив, если это возможно. Анализировать CloudCode имеет версию Underscore библиотеки:
// on http
var _ = require('underscore');
Parse.Promise.when(promises).then(function() {
var results = _.toArray(arguments) // equivalent to Array.prototype.slice above
response.success(results);
}
где вы получаете 'undefined' как значение? –
на console.log ('httpResponse is:' + httpResponse.длина); – OXXY
Каково значение объекта 'httpResponse'? –