2017-02-24 5 views
0

この非同期マップでは、最終的なコールバック引数が「イベント中」ログアウトする前に呼び出されています。 (私はちょうどそれを複雑にするのを避けるためにconsole.logを使用しています)...非同期マップ - 早期に実行されるコールバック

私は最後にログインしています。最終コールバックが直ちに発砲するのを止めるにはどうすればよいですか?

const addEvents = (seasons, cb) => { 
async.map(seasons, (season, seasonCb) => { 
    console.log('in map'); 
    Model.Events.find({season_id: season._id.toString()}, (err, events) => { 
    if (err) { 
     console.log('in err'); 
     return seasonCb(err); 
    } 
    console.log(events, 'events'); 
    }); 
    console.log('finish'); 
    seasonCb(null, season); 
}, (err) => { 
    if (err) { 
    console.log('in err'); 
    return cb(err); 
    } 
    console.log(seasons, 'in last cb'); 
    cb(null, seasons); 
}); 
}; 
+0

イベントはイベントの前にも呼び出されていますか? –

+0

はいそれはマップにログインしてから、各反復ごとにまっすぐに終了してから、最後にcb、次にイベントが最後に終了します。 –

+0

は、seasonCb(null、season)をfind関数に移動し、最後の関数の引数としてシーズンを追加することでこれを解決しました –

答えて

0

検索は非同期操作です。あなたにできることは次のとおりです。

let promise = Model.Events.find(....) 

promise.then((error,data) => { 
    console.log('finish'); 
}) 

これは、あなたが検索の内側に持っているコードのどの部分後に呼び出される仕上げを行う必要があります。

関連する問題