如何从异步方法返回值?

时间:2014-12-10 07:16:08

标签: asynchronous parse-platform return

我需要从异步查询中获取值。我试图让我的代码返回它,但它仍然有效。首先它写入控制台" 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);

2 个答案:

答案 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);