我正在尝试从Parse数据库中检索整个对象,但这不是特定于Parse的问题。我正在尝试使用对象的唯一ID来检索整个对象并将其分配给resultObject变量,以便稍后我可以在同一个addPerk函数中保存对resultObject的引用。
正在发生的事情是,下面的块的最后一行的alert()回来说是resultObject未定义。我相信这是因为objectQuery的成功函数是在alert()行之后调用的,因为它具有异步性质。但是,我认为我可以通过创建一个while()循环使程序等到resultObject定义来解决这个问题。为什么这不起作用?我怎样才能将resultObject从成功函数的范围中删除?
我不想将所有剩余的逻辑移到查询的成功块中,我已经遇到了主要的“死亡金字塔”,并且不想让代码更难以阅读。
addPerk: function()
{
var resultObject;
var Object = Parse.Object.extend("Object");
objectQuery = new Parse.Query(Object);
objectQuery.get(objectId, {
success: function(object) {
alert("returned object in success function is " + object);
resultObject = object;
alert("resultObject in success function is:" + resultObject);
},
error: function(object, error) {
alert("error: " + error.code + ", " + error.message);
}
});
while (typeof correctProvider == "undefined") {
setTimeout(null, 3000);
}
alert("resultObject (after WHILE loop) is: " + resultObject);
答案 0 :(得分:0)
为什么这不起作用?
while (typeof correctProvider == "undefined") {
setTimeout(null, 3000);
}
这是你的逻辑:
JavaScript在循环周围循环,在内存耗尽之前设置尽可能多的超时处理程序。
它太忙了,看看是否其中任何一个实际超时,或者运行成功函数。
我怎样才能将resultObject从成功函数的范围中删除?
你没有。
你必须从回调中前进,你不能回去。
使回调完成您获取数据时要执行的工作。