當您想要按順序執行異步操作時應使用Promise。昂貴的操作,如寫入文件/數據庫,向另一服務發出請求等等,通常都會有異步API,因爲同步執行這些操作會阻止您的單線程JavaScript應用程序。在這些情況下,您可以使用Promise之類的代碼來實現更清晰的代碼,您可以使用命名函數並將它們作爲回調一個接一個地顯式調用,或者您不使用任何東西,並讓自己成爲一個充滿回調的厄運金字塔。
所以,想象一下,您想從您在http請求中收到的令牌中獲取用戶數據,然後獲取有關他的所有帖子,並從您想要粘在其中的其他服務中獲取特殊假期優惠與請求。有了承諾,你可以不喜歡
router.get('/activities', function(req, res){
userRepo.findByToken(token).then(checkForOffer).then(activityRepo.getUserPosts).then(function(composite){
res.send({activities: composite.activities, offer: composite.offer});
}).fail(function(err){
//handle the error
});
})
This post畫的,你應該如何以及何時使用的承諾更清晰的畫面。
JavaScript非常重要。許多對遠程資源的調用。對於這些類型的操作,創造承諾是完全合理的。如果你有CPU綁定操作,你可以看看瀏覽器中使用webworkers或node.js中的child_process模塊。 – lintmouse
「如果cpu被阻塞,並且正在等待外部的東西,比如等待下載的東西,那麼我想我應該promisify該功能。」 ---這會是一個例子嗎?所有的IO都是異步的,所以你基本上沒有選擇。 – zerkms