2015-11-06 2 views
0

Я пытаюсь написать функцию Parse.com Облако кода для выполнения следующего рабочего процесса:Анализировать Облако Код: Логика Ветвления в Promises

  1. Пользователя предоставляет значения.
  2. Функция облачного кода проверяет, соответствует ли это значение объектам типа code.
  3. Если нет, функция возвращает значение «не найден».
  4. Если это так, предполагается, что объект типа code имеет указатель на объект типа item.
  5. Затем code.item проверяется, есть ли указатель на объект типа alert.
  6. Если нет, функция возвращает значение «не найден».
  7. Если code.item.alert Есть, то я хочу получить полный объект alert, включая указатели, которые могут быть или не существовать, до 2 слоев.

Как я начинаю писать код для этой функции, я могу заставить его работать в точке проверки, чтобы узнать, существует ли code и, если да, то также существует ли code.item.alert.

Здесь возникает проблема. Как и в настоящее время, в рабочей версии моей функции возвращается возвращаемый объект alert - это только тип класса и objectId. Я понимаю, почему это происходит, и я пытаюсь написать код, чтобы заполнить объект, прежде чем возвращать его, но я неудачу в этой попытке.

Вот код, который работает до сих пор (но возвращает только оболочку alert объекта):

Parse.Cloud.define("alertLookup", function (request, response) { 
    Parse.Cloud.useMasterKey(); 

    var codeQuery  = new Parse.Query("code"); 
    codeQuery.equalTo("value", request.params.code); 
    codeQuery.include("item"); 

    codeQuery.find().then(function (codes) { 
     if (codes.length === 0) { 
      response.success("no item"); 
     } else { 
      var code = codes[0]; 
      var item = code.get("item"); 
      var alert = item.get("alert"); 
      if (alert === null || alert === undefined) { 
       response.success("no item"); 
      } else { 
       response.success(alert); 
      } 
     }  
    }, function (error) { 
     response.error(error); 
    }); 
}); 

Вот что я пытался, что сбой с кодом ошибки 141:

Parse.Cloud.define("alertLookup", function (request, response) { 
    Parse.Cloud.useMasterKey(); 

    var codeQuery  = new Parse.Query("code"); 
    codeQuery.equalTo("value", request.params.code); 
    codeQuery.include("item"); 

    codeQuery.find().then(function (codes) { 
     if (codes.length === 0) { 
      response.success("no item"); 
     } else { 
      var code = codes[0]; 
      var item = code.get("item"); 
      var alert = item.get("alert"); 
      if (alert === null || alert === undefined) { 
       response.success("no item"); 
      } else { 
       return alert.fetch();     
      } 
     }  
    }).then(function (a) { 
     response.success(a); 

    }, function (error) { 
     response.error(error); 
    }); 
}); 

Почему бы не позвонить fetch()? Когда я вставляю операторы console.log(), хотя alert не является нулевым, return alert.fetch(); никогда не вызывается. По крайней мере, линия response.success(a); никогда не вызывается. Почему нет?

+0

что сообщение 141 об ошибке вы получаете? –

+0

"undefined." Вот и все. – mbm29414

ответ

0

Попробуйте это вместо того, чтобы в то время как СЦЕПЛЕНИЕ Promises:

codeQuery.find().then(function (codes) { 
    if (codes.length != 0) { 
     var code = codes[0]; 
     var item = code.get("item"); 
     var alert = item.get("alert"); 
     if (alert != null && alert != undefined) { 
      var alertObj = new Parse.Object("alert"); // alert class ??? 
      alertObj.id = alert.id; 
      return alertObj.fetch();     
     } 
    } 
    // return a Promise for no items 
    return Parse.Promise.as("no item"); 

}).then(function (a) { 
    response.success(a); 

}, function (error) { 
    response.error(error); 
}); 
+0

Спасибо за ответ, но это дает те же результаты для меня. И, как вы видите, сообщение об ошибке, которое я получаю, бесполезно. Даже журнал журналов/журналов Parse Console не дает мне никакой информации. – mbm29414

+0

141 Ошибка, как правило, является ошибкой сценариев в JavaScript-движке. Я подозреваю, что ваша проблема вызывает 'fetch' в переменной' alert', которая потенциально не является объектом Parse. Я внесла некоторые изменения в код, чтобы убедиться, что вы вызываете 'fetch' в объект Parse, который представляет объект' alert'. –

+0

То же самое. Я считаю, что все эти методы должны работать, но я не могу понять, почему они не являются. Я немного работаю, когда разбиваю это на две функции, но для меня это очень неприятно. Кроме того, даже во втором методе он разбивается нечетно и неожиданно. Я все больше расстраиваюсь с помощью Парса. – mbm29414

Смежные вопросы