0

Mongoデータベースに登録されているすべてのユーザーのリストを返す関数を作成しています。

function getUsers() {
    db.collection('users').find({}, {username: true}, function(error, results) {
        if (results) return results;
        return [];
    });
}

問題は、Mongooseが結果を取得するために無名関数を必要とすることです。結果を取得したときにそれらの結果を返そうとすると、returnは無名関数にのみ影響するため、親関数はundefinedを返します。Mongooseは無名関数を非同期で実行していると思います。

これを解決するための最良の方法は何ですか?

ありがとう。

4

1 に答える 1

2

あなたが正しいです; 非同期関数から戻ることには意味がありません。データベース操作の結果を非同期的に処理する必要があります。(Kamugoが言及しているように、promiseを使用することもできますが、promiseでさえコールバック関数を使用します)。

これを機能させる最も簡単な方法はgetUsers、コールバックを渡し、そのコールバックを次のコールバックに使用して非同期にすることfindです。

function getUsers(callback) {
    db.collection('users').find({}, {username: true}, callback);
}

そして、次のように使用します。

getUsers(function(error, results) {
    if (results) {
        // do something with results
    } else {
        // no results
    }
});
于 2012-09-02T20:58:30.357 に答える