繁体   English   中英

是否有可能检测到承诺链的结束

[英]Is it possible to detect end of promise chain

是否可以在诺言中添加句柄,使其在诺言链的末尾执行。 我知道有done()finally() ,但是它们在当前的承诺解决/失败之后执行,而不是在整个链上执行。

编辑:实际情况是:基本上我有一个分配db连接并执行db查询的函数,并返回一个诺言,该诺言在查询完成时得到解析,并传递连接和结果。 该函数还在返回另一个诺言的连接上设置查询方法,因此可通过从then()处理程序中调用查询方法并返回返回的诺言来将查询链接到同一数据库连接上。 完成所有句柄后,数据库连接必须是免费的。 目前,我只要求函数的用户在最后的then()中手动释放连接,然后在错误处理程序中自动释放该连接。

说白了:

无法检测到最终承诺链。 特别是因为您以后可以添加东西:

var original = delay(500).then(delay(100);
// when is original done?
setTimeout(function(){
    var p = original.then(function(){ return delay(1000);});
    if(Math.random() > 0.5) p = p.then(function(){ return delay(1000); });
});

唯一要做的事情就是嵌套:

myPromise().then(function(){
    return promise2().then(promise3).then(promise4);
}).finally(function(){
    // all promises done here
});

澄清后编辑:

蓝鸟承诺在实验上允许Promise.using ,这将使您可以Promise.using处置连接。 除了异步以外,这与C#中的using(类似。

这是API的示例:

function getConnection(){
    return pool.getConnectionAsync().disposer(function(conn,out){
        conn.releaseToPool();
    });
}

Promise.using(getConnection(), function(connection) {
   return connection.queryAsync("SELECT * FROM TABLE");
}).then(function(rows) {
    console.log(rows);
});

在这种情况下,查询结束后连接即会关闭(即内部链接已完成)。 最大的优点是您不必记住要使用.end ,您可以使用using获得联系。

官方支持即将在2.0中提供。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM