将承诺转换为蓝鸟

Convert promise to bluebird

我找到了一个使用 promises 的现有库,但它不使用 bluebird。库函数不具备 bluebird 像 .map().tap() 那样的所有额外功能。如何将 "normal" 或 "non-bluebird" 承诺转换为 bluebird 承诺,并提供 bluebird 提供的所有额外功能?

我尝试将现有的承诺包装在 Promise.promisifyPromise.resolve 中,但似乎都不起作用。

使用 Promise.resolve - 它会接受任何 thenable,比如来自其他实现的承诺,并将其吸收到 Bluebird 承诺中。

请记住, 可能会产生误导,它与 "fulfill" 的意思不同,但也可以遵循另一个承诺并接受其结果。

如果您想将 promise 转换为 bluebird promise resolve nothing 和 return customPromise 那么您将可以访问链中的所有 bluebird 自定义方法。

Promise.resolve().then(function(){
  return customPromise()
})

或者

Promise.resolve(customPromise())

使用 Bluebird 的 Promise.method!

const Promise = require('bluebird');

const fn = async function() { return 'tapped!' };

bluebirdFn = Promise.method(fn);

bluebirdFn().tap(console.log) // tapped!
fn().tap(console.log) // error

使用to-bluebird:

const toBluebird = require("to-bluebird");

const es6Promise = new Promise(resolve => resolve("Hello World!")); // Regular native promise.
const bluebirdPromise = toBluebird(es6Promise); // Bluebird promise.

本机备选方案:

在 ECMAScript 中:

import {resolve as toBluebird} from "bluebird"

在 CommonJS 中:

const {resolve: toBluebird} = require("bluebird")

用法:

const regularPromise = new Promise((resolve) => {
    resolve("Hello World!") // Resolve with "Hello World!"
})

const bluebirdPromise = toBluebird(regularPromise) // Convert to Bluebird promise

bluebirdPromise.then(val => console.log(val)) // Will log "Hello World!"