2014-09-17 3 views
0

{Отредактированный мой код, чтобы включить родительский цикл)Доступ к глобальным переменным внутри Parse.Cloud.httpRequest {()}

У меня возникли проблемы с функцией Parse.Cloud.httpRequest, которая работает в коде Разбор помутнения и документации по этому методу нет.

По существу я хотел бы быть в состоянии либо

  1. доступ к глобальной переменной (CHANNEL_ID) с в успеха части Parse.Cloud.httpRequest ({}), так что это может быть передается в качестве параметра в функцию (DoSomething()) или
  2. получить ответ JSON от из Parse.Cloud.httpRequest ({}) и переместить функцию, которая использует его (DoSomething()) вне Parse.Cloud .httpRequest ({}).

В настоящее время, независимо от переменного я определить внутри успеха уже нет сферы вне этой функции, и когда я пытаюсь получить доступ к глобальным переменным внутри успеха таких как CHANNEL_ID у меня нет доступа к ним

var query = new Parse.Query("Channel"); 
query.equalTo("FrequentlyUpdated", false); 
query.find ({ 
    success: function (results) { 
     for (var i = 0; i < results.length; i++) { 

      channel_id = results[i].get("channel_id");    


       Parse.Cloud.httpRequest({ 
        url: 'http://vimeo.com/api/v2/channel/' + channel_id + '/videos.json', 
        success: function (httpResponse) { 
        var response = httpResponse.text; 
        DoSomething(response, channel_id); 
       }, 
       error: function (httpResponse) { 
       status.error("failed"); 
       } 
       }); 
     } 
    }, 
    error: function() { 
     status.error("movie lookup failed"); 
    } 
}); 

Возможно, существует более короткая версия функции Parse.Cloud.httpRequest ({}), которая просто берет url и параметры и т. Д. И возвращает ответ JSON или XML?

+0

В вашем коде у вас уже есть доступ к channel_id. Для меня это выглядит действительно нормально, как есть! – fast

+0

Это может быть вопрос времени, потому что я получаю очень странные значения для channel_id ... возможно, это потому, что эти httpRequest находятся внутри цикла – user3711987

+0

, возможно, покажите нам цикл, потому что да, это может объяснить его – ccwasden

ответ

1

Чтобы запросить данные нескольких каналов, вы можете создать одну область для каждого запроса. например по:

var channels = [....]; 

for(var i=0; i < channels.length; i++) { 
queryChannel(channels[i], DoSomething); 
} 

function queryChannel(channel_id, onSuccess) { 

Parse.Cloud.httpRequest({ 
    url: 'http://vimeo.com/api/v2/channel/' + channel_id + '/videos.json', 
    success: function (httpResponse) { 
      var response = httpResponse.text; 
      onSuccess(response, channel_id); 
    }, 
    error: function (httpResponse) { 
      status.error("failed"); 
    } 
    }); 
} 

Обратите внимание, что при вызове queryChannel новой области вводится, который сохраняет CHANNEL_ID от перезаписи при следующем проходе цикла. (что произойдет, если вы разместите содержимое запросаChannel только внутри цикла, без вызова функции.)