2015-11-06 126 views
0

我想寫一個Parse.com雲代碼函數來完成以下工作流程分支:解析雲代碼:邏輯在承諾

  1. 用戶提交的值。
  2. 雲代碼函數檢查該值是否與code類型的任何對象匹配。
  3. 如果不是,則該函數返回「not found」值。
  4. 如果是這樣,code類型的對象被假定爲具有指向item類型對象的指針。
  5. 然後,檢查code.item以查看它是否具有指向alert類型對象的指針。
  6. 如果不是,則該函數返回「not found」值。
  7. 如果code.item.alert確實存在,那麼我想獲取完整的alert對象,包括可能存在或不存在的指針,最多2層深。

當我開始寫代碼這個功能,我可以得到它的工作,以檢查看code是否存在的點,如果是這樣,code.item.alert是否也存在。

這是問題出現的地方。就目前而言,在我的函數的工作版本中,返回的alert項只是類類型和objectId。我明白爲什麼會發生這種情況,並且我正在嘗試編寫代碼來在返回對象之前填充對象,但是我沒有做到這一點。

下面是工作,到目前爲止(但只返回alert對象的shell)代碼:

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

「未定義」。而已。 – mbm29414

回答

0

試試這個鏈接時承諾:

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

感謝您的回覆,但對我而言,結果相同。而且,正如你所看到的,我得到的錯誤信息是毫無價值的。即使是解析控制檯日誌/錯誤日誌也不會給我提供任何信息。 – mbm29414

+0

141錯誤通常是JavaScript引擎的腳本錯誤。我懷疑你的問題是在'alert'變量上調用'fetch',它可能不是一個Parse對象。我在代碼中進行了一些更改,以確保您在代表「alert」對象的Parse對象上調用「fetch」。 –

+0

同樣的事情。我相信所有這些方法都應該起作用,但我不明白爲什麼它們不是。當我把它分解成2個函數時,我有點工作,但對我來說這似乎很笨拙。而且,即使在第二種方法中,它也以奇怪和意想不到的方式突破。我對Parse越來越沮喪。 – mbm29414