我确定它很简单,但我是一个新的javascript ... 我已经搜索了很长时间,但我找不到解决方案 在PARSE中,我想创建一个对象并获取id,然后将其保存
var Obj = Parse.Object.extend("obj");
var obj = new Obj();
obj.save(null,{success:function(obj){alert(obj.id)}})
这警告id,但是当我尝试获取值时,我只得到一个未定义的
var Obj = Parse.Object.extend("obj");
var obj = new Obj();
var objid;
obj.save(null,{success:function(obj){objid = obj.id}})
alert(objid)
你能帮帮我吗? 感谢未定义
答案 0 :(得分:3)
传递给obj.save
的成功回调是异步调用的:它在Parse库收到成功响应后的某个时刻执行。第二个示例中的警报是同步调用的:它不会等待成功回调执行,因此此时将永远不会定义objid
。
这不是与Parse特别相关的问题,而是一般在JavaScript中处理异步代码的问题。这些答案将为您提供JS中异步性的快速介绍:
Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
答案 1 :(得分:1)
要扩展user2943490正确指出的内容,如果您希望alert()工作,只需将其移至成功回调中即可。
答案 2 :(得分:0)
另外需要注意的是,Parse目前包含Promises,其中函数可以在完成后一个接一个地调用和定义。这是一个返回新创建对象的objectId的示例。
var ParseObj = Parse.Object.extend("obj");
// Create a new instance of class.
var obj = new ParseObj();
obj.save(null, { useMasterKey: true }).then(function(obj) {
response.success(obj.id); //obj.id is the objectId
}, function(error) {
// If there's an error storing the request, render the error page.
response.error('Failed to save object.');
});