2017-07-20 9 views
0

私は非同期データベース操作で直接待っています。しかし結果は何もない。ここでは、私のコードです。db操作を直接待つと、未定義の結果が返されます

var channel_arr = await db.find({type:'pricing'},{channel_name:1},function(err,docs){ 
     if(err) { 
      reject(err) 
      return; 
     } 
     var c = [] 
     for(var o of docs){ 
      c.push(o['channel_name']) 
     } 
     return c; 
    }) 
    alert(channel_arr) 

この問題を解決するにはどうすればよいですか?

+0

あなたは '約束をawait'必要があります。そして、あなたはコールバックを渡す必要はありません、それは全体のポイントです。 – Bergi

+0

[既存のコールバックAPIを約束に変換するにはどうすればいいですか?](https://stackoverflow.com/q/22519784/1048572)と[任意のコールバックから '返すことができない理由](https://stackoverflow.com/q/14220321/1048572?非同期呼び出しからの応答返信方法 – Bergi

答えて

2

コールバックを提供しないでください。 プロミスを囲む必要はありません。代わりに、非同期機能を追加します。 おおよそコード:

async function someJob() { 
    try { 
    const channel_arr = await db.find({type:'pricing'},{channel_name:1}); 
    const c = []; 
    for (const o of channel_arr) { 
     c.push(o['channel_name']); 
    } 
    return c; 
    } catch(e) { 
    console.error(e); 
    return []; 
    } 
} 
+0

もっと説明できます – bigbounty

+0

とにかく周囲の関数が 'async'とマークされると解決/拒否されるのはなぜですか? – robertklep