2017-08-02 1 views
1

Feathersjsでは2つのフックを同期的に実行しようとしていますが、 "hook.service.find({query:{active: '1'}})」という文で呼び出されるaddHost関数があります。次に(page => page.data.forEach(addHost)); "最初のフックで2番目のフックの後に実行されています。 hook2を開始する前に、hook1内のすべての文が終了する必要があります。私が間違っていることは何ですか?前もって感謝します!feathersjsで同期フックを実行する方法

module.exports = function (options = {}) { 
    return function hook2 (hook) { 
    /* Some code here.... */ 
    console.log('This code is executing first'); 
    }; 
}; 

xxx.hooks.jsが

module.exports = { 
    /* Some code here.... */ 

    after: { 
    all: [], 
    find: [], 
    get: [], 
    create: [hook1(), hook2()], 
    update: [], 
    patch: [hook1(), hook2()], 
    remove: [] 
    }, 

    /* Some code here.... */ 

}; 
ファイル:

module.exports = function (options = {}) { 
    return function hook1 (hook) { 
    hook.service.find({ query: { active: '1' } }).then(page => page.data.forEach(addHost)); 
    }; 
}; 

function addHost(client) { 
    /* Some code here.... */ 
    console.log('This code is executing at the end'); 
} 

Hook2:

Hook1: 私のコードは次のようです

出力:

このコードは、このコードは終わり

答えて

1

で実行されているあなたはフックを同期実行する必要はありませんが、あなたは非同期処理が続行する前に終了したい最初の

を実行していますに。これは、このようなあなたの場合の約束as documented in the asynchronous hook API docsを返すことで行うことができます。

module.exports = function (options = {}) { 
    return function hook1 (hook) { 
    return hook.service.find({ query: { active: '1' } }) 
     .then(page => page.data.forEach(addHost)) 
     .then(() => { 
     // Always return the `hook` object or `undefined` 
     return hook; 
     }); 
    }; 
}; 
+0

それは動作しますが、あなたにDAFFありがとう、あなたは岩! –

関連する問題