私の約束に問題がありますが、私は削除済みの状態を確認する約束をしていますので、状態が削除されると約束は拒否されますが、応答を拒否キャッチしないと約束、私が間違って何見当がつかない、これは.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()
}
})
}
あなたは '.then(()=> checkDeleted(response.deleted))にこれを書き換える必要があり例えば、それ以外の場合は、 'findById'へのコールバックが実行されるとすぐにすべての関数を呼び出すだけです。 –