【问题标题】:Access to global variables inside Parse.Cloud.httpRequest{()}访问 Parse.Cloud.httpRequest{()} 中的全局变量
【发布时间】:2014-11-11 17:40:02
【问题描述】:

{编辑我的代码以包含父循环)

我在使用 Parse 云代码中运行的 Parse.Cloud.httpRequest 函数时遇到问题,并且没有关于此方法的文档。

基本上我希望能够

  1. Parse.Cloud.httpRequest({})success 部分访问全局变量 (channel_id),以便将其作为参数传递给函数(DoSomething()) 或
  2. Parse.Cloud.httpRequest({}) 获取 JSON 响应并将使用它的函数 (DoSomething()) 移到 Parse.Cloud.httpRequest({} )

到目前为止,我在 success 中定义的任何变量在函数之外都没有作用域,当我尝试访问 success 中的全局变量(例如 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 响应?

【问题讨论】:

  • 在您的代码中,您已经可以访问 channel_id。对我来说,它看起来真的很好,因为它是!
  • 这可能是时间问题,因为我得到的 channel_id 值非常奇怪......也许是因为这些 httpRequest 在循环中
  • 也许可以向我们展示循环,因为是的,这可以解释它
  • 好的...我编辑了帖子以包含循环
  • @user3711987 所以我下面的回答应该可以解决你的问题;-)

标签: javascript http scope parse-platform parse-cloud-code


【解决方案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 被下一次循环覆盖。 (如果您将 queryChannel 的内容放在循环内,没有函数调用,就会发生这种情况..)

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多