2017-12-25 16 views
0

私の約束に問題がありますが、私は削除済みの状態を確認する約束をしていますので、状態が削除されると約束は拒否されますが、応答を拒否キャッチしないと約束、私が間違って何見当がつかない、これは.findByIdコールバックが完了すると、すべての機能がすぐに実行、あなたのコードを書かれている方法で自分のコードq.promiseはノードjsの拒否応答をキャッチできません

//Promises 

function checkDeleted(status){ 
    // 'status' return 0 or 1 
    var deleted = 1 
    var notDeleted = 0 

    return Q.promise(function (resolve, reject){ 
     console.log("check deleted executed") 
     if (status == notDeleted){ 
     console.log('Deleted Status: ' + status) 
     resolve(status) 
     } else { 
     console.log("Else executed") // if i try to update data that has been deleted, it will be executed, actually this already executed after i am try to update data 
     reject(new Error("Data has been deleted")) 
     } 
    }) 
} 

//Handler 
function updateTodo(req, res){ 
    Todo.findById(req.params.id, function (err, response){ 
     if (!err){ 
     checkDataValidated(response) 
     .then(checkDeleted(response.deleted)) //this should be return reject response 
     .then(dataUpdate(response, req)) 
     .then(saveDataUpdated(response)) 
     .then(function (data){ 
      res.json({"data":"all data already updated"}) 
     }) 
     .catch(function (error){ 
      res.send(error)// But reject response not catch here 
     }) 
     .done() 
     } 
    }) 
} 
+0

あなたは '.then(()=> checkDeleted(response.deleted))にこれを書き換える必要があり例えば、それ以外の場合は、 'findById'へのコールバックが実行されるとすぐにすべての関数を呼び出すだけです。 –

答えて

0

です。あなたは() => checkDeleted(response.deleted)のような閉鎖にする必要があります。

私もそれを約推論する方が簡単ですので、あなたがasync/awaitを使用するには、このを書き換えることをお勧め:

async function updateTodo(req, res) { 
    const response = await Todo.findById(req.params.id); 
    try { 
    await checkDataValidated(response); 
    // This will throw an error if it rejects 
    await checkDeleted(response.deleted); 
    await dataUpdate(response, req); 
    const data = await saveDataUpdated(response); 
    res.json({"data":"all data already updated"}); 
    } catch (error) { 
    res.send(error); 
    } 
} 
+0

'.findByIdコールバックが完了するとすぐにすべての関数が実行されます'。実際に私はこの部分を理解していない、Catchは上記のすべての関数からのエラーを処理しますか?function checkDeletedは既に拒否された例外を返しますが、なぜキャッチはそれを取得しませんでしたか?直ちに実行されるすべての機能は重要ではありませんか? –

関連する問題