小编Jor*_*dan的帖子

链式承诺不会传递拒绝

我有一个问题,理解为什么拒绝不通过承诺链传递,我希望有人能够帮助我理解为什么.对我而言,将功能附加到承诺链意味着我依赖于原始承诺的意图.这很难解释,所以让我先展示一下我的问题的代码示例.(注意:此示例使用Node和延迟节点模块.我使用Dojo 1.8.3进行了测试并得到了相同的结果)

var d = require("deferred");

var d1 = d();

var promise1 = d1.promise.then(
    function(wins) { console.log('promise1 resolved'); return wins;},
    function(err) { console.log('promise1 rejected'); return err;});
var promise2 = promise1.then(
    function(wins) { console.log('promise2 resolved'); return wins;},
    function(err) { console.log('promise2 rejected'); return err;});
var promise3 = promise2.then(
    function(wins) { console.log('promise3 resolved'); return wins;},
    function(err) { console.log('promise3 rejected'); return err;});
d1.reject(new Error());
Run Code Online (Sandbox Code Playgroud)

运行此操作的结果是此输出:

promise1 rejected
promise2 resolved
promise3 resolved
Run Code Online (Sandbox Code Playgroud)

好的,对我来说,这个结果没有意义.通过附加到这个承诺链,每个意味着它意味着它将取决于d1的成功解决和结果传递到链.如果promise1中的promise没有收到wins值,而是在其错误处理程序中得到一个错误的值,那么链中的下一个promise怎么可能调用其成功函数?它无法将有意义的值传递给下一个promise,因为它本身并没有获得值.

我可以用不同的方式描述我在想的是:有三个人,John,Ginger和Bob.约翰拥有一个小部件商店.姜进入他的商店,要求一袋各种颜色的小部件.他没有库存,所以他向他的经销商发送请求将他们运到他手中.与此同时,他给了Ginger一张雨检查,说他欠了她一袋小工具.Bob发现Ginger正在获取小部件并要求他在完成这些小部件后获得蓝色小部件.她同意并给了他一张纸条,说明她会.现在,约翰的经销商找不到他们的供应中的任何小部件,制造商也不再制作它们,所以他们告诉约翰,然后通知姜,她无法获得小部件.Bob怎么能在没有得到任何东西的情况下从Ginger获得蓝色小部件?

我在这个问题上的第三个更现实的观点是这个.假设我有两个我想要更新到数据库的值.一个是依赖于另一个的id,但是在我已经将它插入数据库并获得结果之前我无法获得id.最重要的是,第一个插入依赖于来自数据库的查询.数据库调用返回promises,我用它将两个调用链接成一个序列.

var promise = db.query({parent_id: value});
promise.then(function(query_result) {
    var first_value = …
Run Code Online (Sandbox Code Playgroud)

javascript dojo node.js promise deferred

32
推荐指数
1
解决办法
2万
查看次数

如何在不使用plv8.elog()的情况下获取plv8中变量的值?

我遇到了从plv8.elog()获取正确输出的问题.刚开始,我在Ubuntu 12.10上使用pgxn安装的PostgreSQL 9.2,plv8 1.4.1.我有一个我正在构建的函数,它包含嵌套的游标循环并使用许多预准备语句.我正在关闭游标并释放准备好的语句.所有这些功能都会生成一个对象数组,这些对象是将插入到许多不同表中的记录.

它正在分解的地方是我使用对象中的数据循环遍历该数组以生成查询字符串.我正处于代码的这一部分的构建阶段,因此在我通常执行查询字符串的时候,我会尝试将其输出到控制台.这就是腐败发生的地方.

当输出它在我的测试中生成的9个查询字符串时,只显示其中的7个.当我进入postgres日志时,我发现在2个缺失的查询字符串的末尾,有一个看起来像钻石的字符,里面有问号.基本上它是一些无法在当前字符集中显示的字符.我已经测试了查询生成器代码的所有部分,但找不到任何原因.我相信plv8.elog()函数或plv8引擎的字符串连接功能由于某种原因而破坏.

我遇到的问题是,如果它是字符串连接功能,我不能信任查询字符串正确执行.我已经通过从函数中删除代码并使用数组中的静态信息来测试代码.在这种情况下,它工作正常,所以我知道这部分代码没有问题.

首先,有没有人见过这个?plv8.elog()的腐败或怪异行为?当您的函数达到一定的大小或复杂度时,数据是否有任何损坏?如果是这样,你能想出一种至少解决它的方法吗?

另外,如果它是plv8.elog()函数,还有另一种方法来获取变量中的值吗?我知道应该有v8调试器功能,但我没有成功实现这一点.如果有人有这方面的工作经验,你能不能帮助我让它工作?谢谢.

javascript postgresql stored-procedures postgresql-9.2 plv8

5
推荐指数
1
解决办法
746
查看次数