2017-06-17 16 views
0

約束が解決した後、どうして私のresに値がないのですか?非同期約束が結果を返さない

私にconsole.logはこのようなものになります。これは私の関数である

=====!!USER NOT FOUND!!===== 
Res: undefined 

これは私の呼び出し元である

async function findUser(userID, userType) { 
    await new Promise((resolve, reject) => { 
    usersTable.findOne (
     { _id: userID } 
    ,function (err, data) { 
     if (err) { 
      throw new Error('findUser: ' + err); 
     } else { 
      if (!data) { 
       console.log("=====!!USER NOT FOUND!!=====") 
       resolve("NEW"); 
      } else { 
       console.log("=====USER FOUND=====") 
       resolve("OK"); 
      }; 
     }; 
    }); 
})}; 

async function main() { 
    var res = ""; 
    try { 

     // Find the user 
     res = await findUser(userEmail, "tenant"); 
     console.log("Res: " + res); 
     if (res == "NEW") { 
      res = await newUser();     // Add the new tenant 
     } 
    } 
    catch(err) { 
     console.error(err); 
     console.log(" newBooking: " + err); 
     callback({ error:true, err }); 
    } 
} 
main(); 
+0

をあなたがエラー –

+0

@Jonaswを投げるのではなく、拒否すべきであるはい、私は私が唯一の開発中にERRを投げる、ということを見、いったん動作すれば、代わりに拒否します。 'catch(err)'は 'reject("エラーmsg ")'を返しますが、なぜ解決できないのか理解できません。 – torbenrudgaard

答えて

1

検索ユーザーは、STHを返す必要があります:

async function findUser(userID, userType) { 
    return await new Promise((resolve, reject) => { 
    ... 
    }); 
} 

を検索すると、async関数がsthを返すまで、findUser()を待つことになります。非同期関数は未定義を返します。ところで


:あなたは全く非同期機能を使用しない場合があります。

function findUser(userId,userType){ 
    return new Promise(...); 
} 
+0

Gaaaah !!どのように私はそれを見ませんでした!原因のheheheそれはそれだった。もう一度本当にありがとうございます:-) – torbenrudgaard

+0

うーん...私は質問がなぜ私が待っている必要があると思うかを見ることができるように質問を更新しましょう。 – torbenrudgaard

+0

ok Jonas - 呼び出し元を見てください。私は多くのルックアップ(例では省略)を行い、新しいユーザーを追加する必要がありますが、ユーザーが存在しない場合に限ります。それを行うためにfindUser関数を待つ必要はありませんか? – torbenrudgaard

関連する問題