2015-09-29 93 views
3

我正在進入發電機和承諾現在,我已經得到了他們如何工作的句柄。現在是時候讓我自己的功能利用這些。有指導說明如何使他們和他們是什麼,但他們很少討論適當的時候應該使用。什麼時候應該讓函數返回一個promise?

我知道這主要是由於承諾,因爲發電機只是幫助代碼寫作看起來同步(等)。

所以我的問題是:我應該什麼時候應該什麼時候不應該promisify我有的功能?

從我的理解,如果CPU正在使用100%的功能那麼我應該 promisify因爲沒有點。

如果CPU被阻塞,正在等待外在的東西,如在等待着什麼下載,然後我想我應該 promisify該功能。

+0

JavaScript非常重要。許多對遠程資源的調用。對於這些類型的操作,創造承諾是完全合理的。如果你有CPU綁定操作,你可以看看瀏覽器中使用webworkers或node.js中的child_process模塊​​。 – lintmouse

+0

「如果cpu被阻塞,並且正在等待外部的東西,比如等待下載的東西,那麼我想我應該promisify該功能。」 ---這會是一個例子嗎?所有的IO都是異步的,所以你基本上沒有選擇。 – zerkms

回答

1

當您想要按順序執行異步操作時應使用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畫的,你應該如何以及何時使用的承諾更清晰的畫面。

相關問題