2014-06-16 2 views
0

Оператор моего обещания ping eBay несколько раз, каждый раз со свойствами matchCenterItem в качестве параметров. Когда он прошел через все экземпляры, я хочу, чтобы он отправил все ответы в мое приложение iOS.'ReferenceError: httpResponse не определен' При анализе JSON-ответа Parse httpRequest

Моя попытка сделать это в response.success приводит к ошибке, указав httpResponse is not defined, хотя я заранее определяю ее.

Parse.Cloud.define("MatchCenterTest", function(request, response) { 
    //defines which parse class to iterate through 
    var matchCenterItem = Parse.Object.extend("matchCenterItem"); 
    var query = new Parse.Query(matchCenterItem); 
    var promises = []; 
    //setting the limit of items at 10 for now 
    query.limit(10); 
    query.find().then(function(results) { 
     for (i=0; i<results.length; i++) { 
      url = 'http://svcs.ebay.com/services/search/FindingService/v1'; 
      //push function containing criteria for every matchCenterItem into promises array 
       promises.push(function() { 
       return Parse.Cloud.httpRequest({ 
        url: url, 
        params: { 
         'OPERATION-NAME' : 'findItemsByKeywords', 
         'SERVICE-VERSION' : '1.12.0', 
         'SECURITY-APPNAME' : '*APP ID GOES HERE*', 
         'GLOBAL-ID' : 'EBAY-US', 
         'RESPONSE-DATA-FORMAT' : 'JSON', 
         'REST-PAYLOAD&sortOrder' : 'BestMatch', 
         'paginationInput.entriesPerPage' : '3', 
         'outputSelector=AspectHistogram&itemFilter(0).name=Condition&itemFilter(0).value(0)' : results[i].get('itemCondition'), 
         'itemFilter(1).name=MaxPrice&itemFilter(1).value' : results[i].get('maxPrice'), 
         'itemFilter(1).paramName=Currency&itemFilter(1).paramValue' : 'USD', 
         'itemFilter(2).name=MinPrice&itemFilter(2).value' : results[i].get('minPrice'), 
         'itemFilter(2).paramName=Currency&itemFilter(2).paramValue' : 'USD', 
         //'itemFilter(3).name=LocatedIn&itemFilter(3).Value' : request.params.itemLocation, 
         'itemFilter(3).name=ListingType&itemFilter(3).value' : 'FixedPrice', 
         'keywords' : results[i].get('searchTerm'), 
        } 
       }); 
       }); 
     } 
     Parse.Promise.when(promises).then(function() { 
      var eBayResults = JSON.parse(httpResponse.text); 
      for (i=0; i<eBayResults.length; i++) 
      { 
      console.log(eBayResults[i]); // So you can see what the response 
            // looks like for each httpRequest that was made 
      } 
      // and by the way if this is the end of your function, then here you can call 
      response.success(eBayResults); 
     }, function(err) { 
        console.log('error!'); 
        response.error(); 
      }); 
    }); 
}); 
+3

Вы используете 'httpResponse.text', но вы никогда не объявляли переменную' httpResponse'. Может быть, это должно быть '.then (function (httpResponse))'? – Barmar

ответ

1

Попробуйте изменить этот фрагмент в

Parse.Promise.when(promises).then(function(httpResponse) { 
     var eBayResults = JSON.parse(httpResponse.text); 
     for (i=0; i<eBayResults.length; i++) 
     { 
     console.log(eBayResults[i]); // So you can see what the response 
           // looks like for each httpRequest that was made 
     } 

при условии, что ваше обещание возврата объекта HTTPResponse.

+0

Ах, я вижу. Выполнение этого изменения теперь дает мне странную ошибку, в которой говорится: «Неподготовленный SyntaxError: Неожиданный токен u в <неизвестном файле>: 1 (код: 141, версия: 1.2.19)». – Ghobs

+0

И когда я пытаюсь отобразить httpResponse.text сам по себе без разбора, он дает мне значение «null». – Ghobs

+0

@Ghobs попытаются добавить в ответ дополнительные параметры '.then (function (a, b) {' –

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