栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

什么是承诺处理器模式?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是承诺处理器模式?

您的代码有问题

上述方法的问题在于,如果您在每次执行操作后都忘记释放连接

getDb
,则可能会导致资源泄漏,当应用程序耗尽资源时,该应用程序最终可能会冻结。

您可以在一处做:

var users = getDb().then(function(conn){     return conn.query("SELECt name FROM users");});

这将泄漏从未关闭过的数据库连接。


处理器模式

分配器模式是一种将代码范围与拥有资源耦合的方式。通过将资源绑定到作用域,我们确保在完成处理后始终将其释放,并且我们不能轻易忘记释放它。它类似于

using
C#
with
中的Python和Java中的try-
with-resource以及C ++中的RAII。

看起来像:

 withResource(function(resource){     return fnThatDoesWorkWithResource(resource); // returns a promise }).then(function(result){    // resource disposed here });

在这里应用

如果我们将代码编写为:

function withDb(work){    var _db;    return myDbDriver.getConnection().then(function(db){        _db = db; // keep reference         return work(db); // perform work on db    }).finally(function(){        if (_db) _db.release();    });}

我们可以将上面的代码编写为:

 withDb(function(conn){     return conn.query("SELECt name FROM users"); }).then(function(users){     // connection released here });

处置程序模式的用户示例包括sequelize和knex(书架的查询生成器)。例如,还可以将其用于更简单的操作,例如在完成所有AJAX请求后隐藏加载程序。

bluebird

由于您正在使用bluebird,因此它具有专用功能

Promise.using
.disposer
内置功能,可让您立即处理可能需要考虑的多个资源。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号