我想我儘可能地防止嵌套查詢,但我實在不確定。我明白這裏的調用都可以在單個select查詢中執行,但我這樣做是爲了簡化示例。如何防止在集合中嵌套查詢/捕獲?
// This example is in TypeScript
// find user
User.find({where:{username:'user'}})
// if found user
.then(function(user) {
return User.find({where:{username:'other_user'}})
// if found other_user
.then(function(other_user) {
// do stuff
return whatever_i_need
}
// if something went wrong, go straight to parent catch
.catch(function(err) {
// do stuff
throw new Error()
}
}
// if previous .then() returned success
.then(function(data) {
return User.find({where:{username:'yet_another_user'}})
// if found yet_another_user
.then(function(yet_another_user) {
// do stuff
return whatever_i_need_again
}
// if something went wrong, go straight to parent catch
.catch(function(err) {
// do stuff
throw new Error()
}
}
// if anything threw an error at any point in time
.catch(function(err) {
// handle the error
}
但是,這導致了嵌套的承諾,這正是承諾的意圖是防止。這是承諾推薦的「最大深度」,還是我錯過了某些東西?有沒有更好的方式來鏈接查詢?
'這導致嵌套的承諾,而這正是承諾是爲了prevent.' - 有些情況下,嵌套承諾是必要的。不要說這是一個例子,但不要盲目地相信你讀到的有關Promises的所有內容:p –