我需要从异步查询中获取值。我试图让我的代码返回它,但它仍然有效。首先它写入控制台" undefined"然后它写" 19" - 它的正确价值。那么,哪里出错?
我的代码:
var Back = Parse.Object.extend("Back");
var query = new Parse.Query(Back);
var LastSerial;
query.get("ghxbtU2KSl").then(function(result){
LastSerial=result.get("SerialNumber");
console.log(LastSerial);
return LastSerial
});
console.log(LastSerial);
答案 0 :(得分:0)
正如评论中已经提到的那样,查询将以异步方式运行,这意味着当您将其打印到控制台时,Lastserial将不会被赋值。
所有取决于Lastserial值的内容都需要要么嵌套在回调中,要么你可以看看系列promises in parse docs中的承诺。我编辑了你的例子来想象这意味着什么:
var Back = Parse.Object.extend("Back");
var query = new Parse.Query(Back);
var LastSerial;
query.get("ghxbtU2KSl").then(function(result){
//async
LastSerial=result.get("SerialNumber");
//this will print the value correctly
console.log(LastSerial);
return LastSerial
});
//this will be run without waiting for the query to finish, hence print undefined
console.log(LastSerial);
答案 1 :(得分:0)
你不能"返回"来自Promise中的.then子句的值。 then子句将在创建它的代码已经退出后的某个时间运行。处理此问题的方法是从then子句调用一个函数来处理返回的数据。
或者,您可以"链"你的承诺。
var Back = Parse.Object.extend("Back");
var query = new Parse.Query(Back);
var LastSerial;
var p0;
var p1;
p0 = query.get("ghxbtU2KSl");
p1 = p0.then(function(result){
//async
LastSerial=result.get("SerialNumber");
//this will print the value correctly
console.log(LastSerial);
return LastSerial
});
p1.then(function(result){
// Do stuff with result, which is LastSerial
console.log(result);
return 0
});
//this will be run without waiting for the query to finish, hence print undefined
console.log(LastSerial);