gpt4 book ai didi

javascript - 你如何正确地 promise 请求?

转载 作者:IT王子 更新时间:2023-10-29 03:18:05 25 4
gpt4 key购买 nike

Bluebird promisifaction 有点神奇,而 request 相当困惑(它是一个函数,其行为类似于具有方法的对象)。

具体场景非常简单:我有一个启用了 cookie 的请求实例,通过 cookie jar(不使用 request 的全局 cookie 处理程序)。我怎样才能有效地 promise 它,以及它支持的所有方法?

理想情况下,我希望能够:

  • 调用 request(url) -> Promise
  • 调用 request.getAsync(url) -> Promise
  • 调用 request.postAsync(url, {}) -> Promise

似乎 Promise.promisifyAll(request) 无效(因为我收到“未定义 postAsync”)。

最佳答案

以下应该有效:

var request = Promise.promisify(require("request"));
Promise.promisifyAll(request);

请注意,这意味着 request 不是一个自由函数,因为 promisification 可以与原型(prototype)方法一起使用,因为 this 是事先不知道的。它只适用于较新版本的 Bluebird 。当您需要为 cookie fork 请求对象时重复它。


如果您使用的是 Bluebird v3,则需要使用 multiArgs 选项:

var request = Promise.promisify(require("request"), {multiArgs: true});
Promise.promisifyAll(request, {multiArgs: true})

这是因为请求的回调是 (err, response, body):Bluebird v3 的默认行为是只接受第一个成功值参数(即 response) 并忽略其他(即 body)。

关于javascript - 你如何正确地 promise 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28308131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com