当前位置: 首页 > 面试题库 >

从异步等待功能获取Bluebird Promise

奚修伟
2023-03-14
问题内容

我正在寻找一种使用Node v7.6或更高版本的方法,以在调用异步函数时获得Bluebird
Promise(或任何非本机Promise)。

用同样的方式,我可以做:

global.Promise = require('Bluebird'); // Or Q/When
var getResolvedPromise = () => Promise.resolve('value');

getResolvedPromise
  .tap(...) // Bluebird method
  .then(...);

请参阅: 我可以使用global.Promise = require(“
bluebird”)

我希望能够执行以下操作:

global.Promise = require('Bluebird'); // Or Q/When
var getResolvedAsyncAwaitPromise = async () => 'value';

getResolvedAsyncAwaitPromise()
  .tap(...) // Error ! Native Promises does not have `.tap(...)`
  .then(...);

我知道我可以随时使用类似的东西:

Bluebird.resolve(getResolvedAsyncAwaitPromise())
  .tap(...);

但是我很 好奇 是否有办法更改所返回的默认Promise AsyncFunction。构造函数似乎是封闭的:

请注意,AsyncFunction不是全局对象。可以通过评估以下代码获得。

Object.getPrototypeOf(async function(){}).constructor

MDN参考AsyncFunction

如果无法更改AsyncFunctionPromise构造函数,我想知道此锁定的原因。

谢谢 !


问题答案:

有没有办法更改AsyncFunction返回的默认Promise

没有。

锁定的原因是什么

劫持所有人async function的能力可能是一个安全问题。另外,即使没有问题,在全球范围内进行替换仍然没有用。这将影响您的整个领域,包括您正在使用的所有库。他们可能依赖使用本地承诺。尽管可能需要使用两个不同的Promise库,但您不能使用它们。

我希望能够执行以下操作:

getResolvedAsyncAwaitPromise().tap(...)

可以
做的是在函数的定义处使用Promise.method

const Bluebird = require('Bluebird');
const getResolvedAsyncAwaitPromise = Bluebird.method(async () => 'value');

getResolvedAsyncAwaitPromise()
.tap(…) // Works!
.then(…);


 类似资料:
  • 我正在尝试做一个简单的应用程序,加载数据并对其执行一个操作.所以我的想法是做这个异步。 我有3个数据源,我想异步加载它们。例如data1.xml、data2.xml和data3.xml所有文件加载起来都相当大,所以需要一些时间(这就是为什么我想要异步的原因)。 例如,我创建了一个包含3个文本框的窗口,这些文本框都绑定到一个特定的属性(Text1、Text2、Text3)和一个按钮。当我点击按钮时,

  • 问题内容: 我正在尝试使用新的异步功能,希望解决我的问题以后能对其他人有所帮助。这是我的代码正在工作: 问题是,我的while循环运行得太快,脚本每秒向Google API发送太多请求。因此,我想构建一个睡眠函数以延迟请求。因此,我也可以使用此功能来延迟其他请求。如果还有其他方法可以延迟请求,请告诉我。 无论如何,这是我的新代码不起作用。请求的响应在setTimeout中返回给匿名异步函数,但是我

  • 问题内容: 据我了解,在ES7 /ES2016中,将多个in放在代码中的工作方式类似于带有promise的链接,这意味着它们将一个接一个地执行而不是并行执行。因此,例如,我们有以下代码: 我是否正确理解仅在完成时才会调用?并行调用它们的最优雅方式是什么? 我想在Node中使用它,所以也许有一个异步库解决方案? 编辑:我对这个问题提供的解决方案不满意:减速是由于异步生成器中非并行等待Promise的

  • 问题内容: 我有一个使用一些异步功能的节点应用程序。 在继续进行其余的应用程序流程之前,我该如何等待异步功能完成? 下面有一个简单的示例。 在示例中,要返回的元素“ ”必须为5而不是1。如果应用程序不等待异步功能,则等于1。 谢谢 问题答案: 使用回调机制: 使用异步等待

  • 问题内容: 我写了这段代码 然后我尝试在另一个文件中使用它 我有一个错误 “等待仅在异步功能中有效” 有什么问题 问题答案: 错误不是指而是。 我利用这个问题的机会来告诉你一个已知的反模式的使用方法:。 错误 正确 另外,要知道有一个正确且重要的特殊情况:(使用try / catch)

  • 我试图在react/electron项目中使用async/await,但它不起作用。我想要的是获取docker容器状态列表。但是安慰。日志(列表)返回未定义的。 有人能帮我吗?:)