1. ホーム
  2. javascript

[解決済み] 関数の変数を返す前に、プロミスが終了するのを待つには?

2022-04-14 15:40:16

質問

私はまだ約束事について悩んでいますが、ここのコミュニティのおかげで少し前進しています。

私は、Parseデータベースに問い合わせる簡単なJS関数を持っています。それは結果の配列を返すことになっていますが、明らかにクエリの非同期性(それゆえ約束)のために、関数は結果の前に戻り、私には未定義の配列が残されています。

この関数をプロミスの結果を待つようにするには、どうすればよいのでしょうか?

以下は私のコードです。

function resultsByName(name)
{   
    var Card = Parse.Object.extend("Card");
    var query = new Parse.Query(Card);
    query.equalTo("name", name.toString());

    var resultsArray = [];

    var promise = query.find({
               success: function(results) {
               // results is an array of Parse.Object.
                             console.log(results);
                             //resultsArray = results;
                             return results;
               },

               error: function(error) {
               // error is an instance of Parse.Error.
                             console.log("Error");
               }
    });                           

}

解決方法は?

を返す代わりに resultsArray は、結果配列に対するプロミスを返し、その後に then これには、呼び出し側が関数が非同期I/Oを実行していることを知ることができるという利点もあります。JavaScriptの並行処理のコーディングはこれに基づいています。 この質問 を使えば、より広い視野で考えることができます。

function resultsByName(name)
{   
    var Card = Parse.Object.extend("Card");
    var query = new Parse.Query(Card);
    query.equalTo("name", name.toString());

    var resultsArray = [];

    return query.find({});                           

}

// later
resultsByName("Some Name").then(function(results){
    // access results here by chaining to the returned promise
});

クエリでパースプロミスを使用する他の例は、以下で見ることができます。 パース自身のブログ記事 .