1

この関数は、データベースから質問を取得し、それを返すことになっています。データベースは Parse オブジェクトです (https://www.parse.com/docs/js_guide)。コードのコメントに示されているように、質問は db 呼び出しの成功関数内からアクセスできますが、その外部からはアクセスできず、単に return ステートメントを成功ブロック内に配置しても機能しません。以下のコード。助言がありますか?

function getQuest(){

    var Question = Parse.Object.extend("Question");
    var query = new Parse.Query("Question");
    var questlist = [];
    var newquestion;
    //get list of questions if chosen track is python or java. track is set globally

    if (track == "python")
    {

        query.equalTo("track", "xstsysysus7");

    } else if (track == "java"){

        query.equalTo("track", "XAWqBgxFAP");

    }

    query.find({

        success: function(questions){
        // return list of questions
            var i = Math.floor(Math.random()*10);
            newquestion = questions[i].get('question');
             console.log(newquestion); // works here

    },

        error: function(error){
            console.log(error.message);
        }


    });

    console.log(newquestion); //returns undefined here
    return newquestion;

}
4

2 に答える 2

7

このようなコールバックメソッドから戻ることはできません。これは非同期の問題です。コールバックメソッドを使用して、メソッドから変数を取得する必要があります。

function getQuest(callback){

var Question = Parse.Object.extend("Question");
var query = new Parse.Query("Question");
var questlist = [];
var newquestion;
//get list of questions if chosen track is python or java. track is set globally

if (track == "python")
{

    query.equalTo("track", "xstsysysus7");

} else if (track == "java"){

    query.equalTo("track", "XAWqBgxFAP");

}

query.find({

    success: function(questions){
    // return list of questions
        var i = Math.floor(Math.random()*10);
        newquestion = questions[i].get('question');
        //call the callback method here and pass your variable as a param
        if(callback != null && callback != undefined){
              callback(newquestion);
        }


},

    error: function(error){
        console.log(error.message);
    }


});

}

これで、var newQ = getQuest()を使用する代わりに、このようにgetQuestメソッドを呼び出すことができます。

getQuest(function(newQuestion){
   // do your stuff with newQuestion 
})
于 2013-01-22T06:24:18.780 に答える
0

コールバック (成功とエラー) は非同期です。関数が戻る前に実行されていない可能性があります。

于 2013-01-22T06:20:32.240 に答える