Javascript 什么时候一个函数应该返回一个承诺?
我现在正在研究发电机和承诺,我已经掌握了它们的工作原理。现在是时候让我自己使用这些函数了。有一些指南解释了如何制作它们以及它们的用途,但是它们很少讨论何时应该使用它们 我知道这主要取决于承诺,因为生成器只是帮助代码编写看起来是同步的(除其他外) 所以我的问题是:我应该什么时候以及什么时候不应该承诺我拥有的功能? 根据我的理解,如果cpu被函数100%利用,那么我应该不承诺,因为这没有意义Javascript 什么时候一个函数应该返回一个承诺?,javascript,node.js,ecmascript-6,v8,es6-promise,Javascript,Node.js,Ecmascript 6,V8,Es6 Promise,我现在正在研究发电机和承诺,我已经掌握了它们的工作原理。现在是时候让我自己使用这些函数了。有一些指南解释了如何制作它们以及它们的用途,但是它们很少讨论何时应该使用它们 我知道这主要取决于承诺,因为生成器只是帮助代码编写看起来是同步的(除其他外) 所以我的问题是:我应该什么时候以及什么时候不应该承诺我拥有的功能? 根据我的理解,如果cpu被函数100%利用,那么我应该不承诺,因为这没有意义 如果cpu被阻塞,并且正在等待外部操作,例如等待下载,那么我想我应该推荐该功能。当您希望按顺序执行异步操作时
如果cpu被阻塞,并且正在等待外部操作,例如等待下载,那么我想我应该推荐该功能。当您希望按顺序执行异步操作时,应该使用Promises。成本高昂的操作,如写入文件/db、向另一个服务发出请求等,通常都有一个异步api,因为同步执行这些操作会阻塞单线程javascript应用程序。在这些情况下,您要么使用承诺之类的东西来获得更干净的代码,要么使用命名函数并显式地逐个调用它们作为回调,要么不使用任何东西,让自己的命运金字塔充满回调 因此,假设您希望从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
});
})
更清楚地描述您应该如何以及何时使用承诺。JavaScript的IO负担非常重。对远程资源的大量调用。对于这些类型的操作,创建承诺是完全有意义的。如果您有CPU限制的操作,可以在浏览器中使用webworkers,或者在node.js中使用子进程模块。“如果CPU被阻塞,并且正在等待外部的东西,例如等待下载,那么我想我应该推荐该函数。”---举个例子吧?所有IO都已经是异步的,所以您基本上没有选择。