Javascript - 使用函数外部的对象

时间:2014-11-25 20:38:38

标签: parse-platform

n00b问题在这里。 我在函数内部有一个变量,我想在另一个函数中使用它。 对于一些我的理由我不能这样做,可能是一些我遗漏的小问题......

function getIDs() {
Parse.initialize("mycode", "mycode");
    var recipeObject = Parse.Object.extend("mycode");
    var query = new Parse.Query(recipeObject);
    query.notEqualTo("objectId", "mycode");
    query.find({
    success: function(results) {
      for (var i = 0; i < results.length; i++) { 
      var object = results[i];
      var objectIdent = object.id;
      var objectText = object.get('recipe_text');
      var getObject = query.equalTo("objectId", objectIdent);
      console.log(object.id);
   }
  },
  error: function(object, error) {
    alert("fail");
  }
    });


    }
 //Here I am trying to acces the object.id object and just can't get it..
      console.log(object.id);

提前致谢!

4 个答案:

答案 0 :(得分:1)

这是scope的问题,你可以这样做(假设最后一行:console.log(object.id);位于最高范围级别):

Parse.initialize("mycode", "mycode");
    var recipeObject = Parse.Object.extend("mycode");
    var query = new Parse.Query(recipeObject);
    query.notEqualTo("objectId", "mycode");
    query.find({
    success: function(results) {
      for (var i = 0; i < results.length; i++) { 
      var object = results[i];
      var objectIdent = object.id;
      var objectText = object.get('recipe_text');
      var getObject = query.equalTo("objectId", objectIdent);

      window.object = object; // make object available at a window scope
      console.log(object.id);
   }
  },

答案 1 :(得分:1)

不是100%肯定,但你可以尝试不使用var关键字。

var关键字使其范围特定于{}。

答案 2 :(得分:0)

这篇文章告诉我,我需要在我的函数中创建另一个函数才能访问变量。 How do you reference a custom object outside of the function it was created in with JavaScript? 所以我去了这样添加:

function getIDs() {
Parse.initialize("mycode", "mycode");
var recipeObject = Parse.Object.extend("mycode");
var query = new Parse.Query(recipeObject);
query.notEqualTo("objectId", "mycode");
query.find({
success: function(results) {
  for (var i = 0; i < results.length; i++) { 
  var object = results[i];
  var objectIdent = object.id;
  var objectText = object.get('recipe_text');
  var getObject = query.equalTo("objectId", objectIdent);
  function internalShit(){
    console.log(objectIdent);
  }
  internalShit();
}
},
}
},
error: function(object, error) {
alert("fail");
}
});
}

答案 3 :(得分:0)

初始代码IMO存在两个问题。一个是上面指出的范围问题。另一个是“异步”问题。请记住,当您调用Parse时,它是一个异步调用。这意味着它将发出请求并继续执行其余代码。无法保证何时会回复您的“成功:”代码。

在下面的示例中,query.find将发送请求并继续执行console.log作为下一行。在获得响应之前,它不会执行“success:...”代码,这很可能是在console.log之后。因此,consol.log很可能输出“not”。

var done = "not";

... Parse Query Initialization...

query.find({
success: function(results) {
  done = "done!";
} ...error handling etc

console.log(done); //will most likely log "not"

保证响应后执行代码的唯一方法是将其置于成功或错误块中。

祝你好运!