问题标签 [bluebird]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2878 浏览

javascript - 我违背了我的承诺

所以..我最难学习如何承诺。

我正在使用bluebirdhttps://github.com/petkaantonov/bluebird),正如我所建议的那样——为了驯服我的回调地狱。例子:

很恶心,到处都是回调,而且函数ref在查询回调执行完之前就返回了。

解决方案:承诺!

我尝试使用快速入门转换我的功能.. 所以我在创建连接之前promisefyAll我的mysql模块:

我写了我的函数如下:

但我不断得到TypeError: Cannot call method 'then' of undefined at Object.login (/var/www/post/posts.js:36:22)

TypeError: undefined is not a function at Pool.<anonymous> (/var/www/node_modules/mysql/lib/Pool.js:53:14)

错误。有人可以帮助我了解如何实现查询我的数据库的承诺(正确)吗?

编辑(接受回答后:):这是我调用登录功能的方式:

0 投票
1 回答
1400 浏览

javascript - 获取 bluebird.all().spread() 运行的任务状态

我有两个由 Bluebird 运行的任务:

使用q.js我得到了回应:

因此,在该spread()部分中,我能够检查每个任务的状态。
这是我在 Bluebird 之前使用的代码

有了蓝鸟,我得到了:

仅包含我的任务生成的数组。

我想我需要Promise.allSettled,但在文档中找不到。
如何获取每个任务的状态?

0 投票
4 回答
16983 浏览

javascript - 像在 Q 中定义空的 Bluebird 承诺

使用 QI 可以定义一个新的承诺:

但是如果我这样做的话,使用蓝鸟:

我得到:

我怎样才能得到与 Q 相同的结果?

这是我的代码片段:

0 投票
1 回答
129 浏览

javascript - 我必须承诺更新吗?

我正在尝试将回调更新查询转换为一个不错的、简洁的承诺……但后来它击中了我。我需要承诺吗?

这是我的旧回调函数:

这确实有效,但它和承诺一样“好”吗?承诺是否适用于更新/插入查询?下面的函数不起作用,没有错误,这让我想知道 promise 是用于更新数据库数据还是只是选择它?还是我的功能刚刚损坏但没有错误损坏?

0 投票
3 回答
845 浏览

javascript - 失去可变范围

所以,一旦我解决了我之前的问题的承诺问题,我尝试在登录时从数据库中获取玩家帐户 X、Y 坐标(这样它们就不会放在 1,1 上,而是放在他们最后跟踪的坐标上)

经过一番调试,我得出了这个结论:

这就是整个功能——以防万一缺少某些范围。但这里是麻烦线:

我的印象Promise是会在我的查询完成之前解决这个函数触发问题,但我想不会。

为什么我的函数在设置 X、Y 变量之前返回?

注意:下一步是将我的关注点与函数分开,所以请忽略我在传递conmysql就像在比赛中的接力棒一样。谢谢!

0 投票
1 回答
4750 浏览

javascript - 使用 Bluebird 在 Promise 中包装 Node.js 回调

如何在 Bluebird 中使用 Promise 包装 Node.js 回调?这是我想出的,但想知道是否有更好的方法:

如果只需要返回一个错误,是否有更简洁的方法来执行此操作?

编辑 我尝试使用 Promise.promisifyAll(),但结果没有传播到 then 子句。我的具体例子如下所示。我正在使用两个库:a) sequelize,它返回 Promise,b) supertest(用于测试 http 请求),它使用节点样式回调。这是不使用 promisifyAll 的代码。它调用 sequelize 来初始化数据库,然后发出 HTTP 请求来创建订单。两个 console.log 语句都正确打印:

现在我尝试使用 promisifyAll,这样我就可以将调用与 then 链接起来:

当我到达第二个 console.log 时, res 参数是未定义的。

我究竟做错了什么?

0 投票
2 回答
749 浏览

javascript - 返回一个依赖的承诺

我希望这是我所缺少的一件简单的事情,但我似乎无法按我的意愿返回数据。我的函数 login 需要一个用户名,并返回用于身份验证的密码和 id,以及来自数据库的用户 XY 坐标。

XY 坐标取决于登录查询返回的 ID,这些 ID 都作为 a 返回Promise给 main 函数进行身份验证。但是,我看不到将所有数据返回到一个精心编织的对象中。

这记录:

密码是从控制台语句记录的,而不是返回的。唯一返回的是xy坐标。如何以与函数返回的 Promise 相同的方式返回查询结果?

0 投票
1 回答
1341 浏览

javascript - Node.js:“yield”关键字的承诺回调库

我正在尝试使用 Koa.js 构建一个简单的 REST API。它使用 ES6 生成器函数,我发现它比回调更令人愉快(它们就像 C# 的 async-await 一样)。yield 关键字需要一个 thenable(promise、thunk、generator)。我正在使用 Bluebird 的 promisifyAll 方法来承诺回调库(在我的情况下是请求),但我仍然不断收到错误消息。这是我的代码和错误:

错误的堆栈跟踪:

我错过了什么?

0 投票
1 回答
4797 浏览

promise - 不解决或拒绝承诺是否安全

想象一个带有路由的 Web 应用程序,在继续之前需要检查用户是否被允许访问给定的资源。“已验证”检查依赖于数据库调用。

在每条路线中,我可能有:

我希望该authorizeOwnership()函数能够处理 403(拒绝访问)和 500(例如数据库查询错误)响应,这样每个路由就不需要明确地这样做。

我有一个可以查询数据库以检查所有权的功能。

然后将其用于authorizeOwnership

在这种情况下,我故意不调用reject()resolve()在某些代码路径中。如果我这样做了,那么我的“外部”路由逻辑(正在调用的代码authorizeOwnership())会变得更加复杂,因为它必须处理错误(使用 a.catch()或使用nullcheck in .then())。

不过有两件事让我有点紧张:

  • authorizeOwnership()在错误场景中永远不会解决的承诺是否可以?它会导致延迟或内存泄漏吗?

  • confirmOwnership()用 null 解决说“找不到匹配的资源”然后将其视为错误在逻辑上是否合理authorizeOwnership()?我的第一次尝试在没有匹配资源的情况下拒绝了承诺confirmOwnership(),但这使事情变得更加复杂,因为很难区分这个(403 案例)和实际错误(500 案例)。

0 投票
1 回答
10437 浏览

node.js - Koa / Co / Bluebird 或 Q / Generators / Promises / Thunks 相互作用?(Node.js)

我正在研究部分使用 Koa 构建一个 Web 应用程序,但我不太了解如何、何时以及为什么在支持性“使异步更容易”的技术/方法之间进行选择和应用(下面列出)。

总的来说,网络上关于这个主题的不同指导仍然使事情变得模糊,特别是在不断发展的最佳实践方面,或者至少是更好的实践,以及在什么情况下。网络上似乎很少或根本没有将所有内容放在上下文中。

我希望对这个庞大的帖子的回应可以纠正这一点。另外,也许下面的问题可以激发某人写一篇详尽的博客文章或类似的文章来解决这个问题。我的感觉是,我什至不是唯一一个会从中受益的人。

因此,如果聪明的社区可以帮助回答并澄清与下面列出的技术有关的以下问题(粗体字),我会很高兴:

--a) 它们如何以及在什么情况下(如适用)相互补充、补充、替代和/或重叠解决方案?

-- b) 在速度-性能、错误处理的便利性和调试的便利性方面,它们的权衡是什么?

-- c) 何时、何地以及为什么使用“这个”与“那个”技术、技术组合和/或方法相比更好?

-- d) 哪些技术或方法(如果有的话)可能是“暗星”。

(希望作为答案一部分的意见可以得到很好的解释。)

===============================

技术:

*考阿*

我的理解:

Koa 是构建 Node 应用程序的最小基础,旨在利用 ECMAScript-6 功能,其中一个功能特别是生成器。

* 合作 *

我的理解:

-- Co 是一个用于运行 ECMAScript-6 生成器的实用程序库(它是 Node .011 和谐的本机),其目标是减轻一些/大部分(?)需要编写样板代码来运行和管理生成器。

-- Co 本质上是 Koa(?)的一部分。

具体问题:

-- 如果以及如何在 Koa 中与在非 Koa 上下文中不同地使用 Co。换句话说,Koa 是不是完全门面公司?

-- 如果有/曾经有更好的生成器库,是否可以在 Koa 中将 Co 替换为其他类似的生成器库?有吗?

* Promise 库,例如“Q”和 Bluebird *

我的理解:

-- 在某种意义上,它们是用于实现 Promises/A+ 规范的“polyfills”,如果且直到 Node 原生运行该规范。
-- 他们还有一些非规范的便利实用程序来促进使用承诺,例如 Bluebird 的 promisfyAll 实用程序。

具体问题:

-- 我的理解是 ECMAScript-6 规范确实/将在很大程度上反映 Promises/A+ 规范,但即便如此,Node 0.11v 和谐并没有原生地实现 Promises。(这是正确的吗?)但是,当它出现时,Q 和 Bluebird 等技术会退出吗?

-- 我读过一些大意是“Q”和Bluebird 支持生成器。这是什么意思?这是否在一定程度上意味着,例如,它们在某种程度上提供了与 Co 相同的效用,如果是,那么到什么程度?

* 重击和承诺 *

我想我对它们是什么有一个公平的处理,但希望有人能提供一个简洁明了的“电梯间距”定义,当然,如上所述,解释何时使用一个与另一个 -在 Koa 上下文中,而不是在其中。

具体问题:

-- 使用 Bluebird 的 promisfy 之类的东西,而不是使用 Thunkify (github com/visionmedia/node-thunkify) 的利弊?

===============================

为了给这篇文章及其问题提供更多背景信息,如果可以讨论和对比以下网页中介绍的 Koa 技术(尤其是在优缺点的基础上),这可能会很有趣:

- a) www.marcusoft 。net/2014/03/koaintro.html (thunk 或 promises 在哪里,或者我没有看到什么?)

- b) 强循环。com/strongblog/node-js-express-introduction-koa-js-zone (同样,thunk 或 promises 在哪里?)

- c) github 。com/koajs/koa/blob/master/docs/guide.md(“下一个”参数等同于什么,以及它的设置和位置?)

-- d) blog.peterdecroos 。com/blog/2014/01/22/javascript-generators-first-impressions (不在 Koa 上下文中,但展示了 Co 与 Promise 库(Bluebird)的使用,所以我假设这里介绍的技术/模式借给自己在 Koa(?) 中使用。如果是这样,那么效果如何?

谢谢大家!