簡體   English   中英

JS代碼返回錯誤

[英]JS code returning error

我是JS的新手,必須將其用於Cloud Code Parse功能。 我有一個名為“ user_picture”的類,通過代碼查詢所有對象並通過其“ City”屬性。 我希望響應是一組唯一的城市名稱。 無論如何,這是我正在處理的代碼:

Parse.Cloud.define("cities", function(request, response) {
var query = new Parse.Query("user_picture");
query.find({
success: function(results) {
    var cities = new Array();

    for (var object in results){
        var tempArray = [object.get("city")];

        if (cities.length > 0){
            for (var i = 0; i < cities.length; i++){
                if (cities[i].get("city") == object.get("city")) {
                    break;
                } else if (i == cities.length-1) {
                    cities = cities.concat(tempArray);
                }
            }
        }
    }   
    response.success (cities);
}, error: function() {
    response.error("Error");
}
});});

但是,當我運行此功能時,出現以下錯誤:

Error: TypeError: Object 0 has no method 'get'
at query.find.success (main.js:15:30)
at Parse.js:2:5786
at r (Parse.js:2:4981)
at Parse.js:2:4531
at Array.forEach (native)
at Object.E.each.E.forEach [as _arrayEach] (Parse.js:1:666)
at n.extend.resolve (Parse.js:2:4482)
at r (Parse.js:2:5117)
at Parse.js:2:4531
at Array.forEach (native) (Code: 141, Version: 1.2.18)

並且響應返回null。 我嘗試從結果數組中打印一個對象,以確保我收到正確的查詢,並且它在城市上打印良好。 可能是什么問題呢?

for in循環遍歷對象文字的所有鍵。 由於results是一個數組,它將迭代數組的鍵,即“ 0”,“ 1”等。

這意味着object變量將保存這些關鍵值。 而且由於它們不是對象,所以沒有稱為get的方法。

您需要一個forEach循環。

results.forEach(function(object){
    var tempArray = [object.get("city")];

    if (cities.length > 0){
        for (var i = 0; i < cities.length; i++){
            if (cities[i].get("city") == object.get("city")) {
                break;
            } else if (i == cities.length-1) {
                cities = cities.concat(tempArray);
            }
        }
    }
}  

});

或者,如果您以ES3為目標,則應使用for循環

for(var i = 0, length = results.length; i< length; i++){
    var object = results[i];

    var tempArray = [object.get("city")];

    if (cities.length > 0){
        for (var i = 0; i < cities.length; i++){
            if (cities[i].get("city") == object.get("city")) {
                break;
            } else if (i == cities.length-1) {
                cities = cities.concat(tempArray);
            }
        }
    }
}

我回想起使用Parse對象的情況,似乎有時需要將它們作為對象進行訪問(通過直接參數訪問),有時通過使用get方法來進行訪問,看起來您正在混合使用數組訪問和對象(來自Parse) )訪問方法。

此外,您的列表生成器似乎並沒有真正在構建唯一列表。 您僅檢查當前城市是否與要添加的城市相同。

我可能會做更多類似的事情(對於成功方法):

function(parseResults) {
  var cities = {};
  var ii=0;
  var nResults = parseResults.length
  for(;ii<nResults;++ii) {
    cities[result.get('city')] = 1
  }
  var citiesArray = cities.keys();
  response.success(citiesArray);
}

我們在這里要做的是建立一個對象,其鍵為城市名稱。 然后將鍵作為數組返回。 這對我們來說是自動建立一個唯一列表,因為對象鍵應該是唯一的。

如果result.get給您帶來問題,請嘗試將其替換為result.city 但是我懷疑您在第一個示例中看到的錯誤是試圖調用Array元素上的get

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM