2017-03-14 15 views
0

私のnode.jsサーバーでnode-celery 0.2.8を使用していて、client.on()でawaitを使用してコードを期待しています最初にログの結果をコンソールに表示し、最後にログに記録します。しかし、コードコンソールのログは「最後に」最初に、その後すべてのコード、コンソールのログ結果を通過した後。誰でも私にclient.on()の作業を待たせてもらえますか?私はコードが順番に実行できることを望み、asychronise要求を待つだけです。node-celery asychronise、client.call()が内部関数を終了するのを待ちます

async(ctx) => { 
    const client = celery.createClient({ 
    CELERY_BROKER_URL: 'amqp://guest:[email protected]**.2.**:5672//', 
    CELERY_RESULT_BACKEND: 'redis://172.**.2.**:6379/2', 
    CELERY_ROUTES: { 
     'street.add_account_multi': {'queue': 'street_default'}, 
    } 
    }); 

    await client.on('connect',() => { 

    client.call('street.add_account_multi', [crawlers], function (result) { 
     console.log(result); 
    }); 

    }); 

    console.log('finally'); 
} 

答えて

1

「接続」イベントの後にあなたの操作を約束してから、解決を待ってください。

let clientConnect = new Promise((resolve, reject) => { 
    client.on('connect',() => { 
    client.call('street.add_account_multi', [crawlers], function(result) { 
     console.log(result); 
     resolve(result); 
    }); 
    }) 
}); 
await clientConnect; 
console.log('finally'); 
+0

ありがとう、張氏、あなたの答えは私の質問を完全に解決します! – JACK

関連する問題