将承诺转换为蓝鸟
Convert promise to bluebird
我找到了一个使用 promises 的现有库,但它不使用 bluebird。库函数不具备 bluebird 像 .map()
或 .tap()
那样的所有额外功能。如何将 "normal" 或 "non-bluebird" 承诺转换为 bluebird 承诺,并提供 bluebird 提供的所有额外功能?
我尝试将现有的承诺包装在 Promise.promisify
和 Promise.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!"
我找到了一个使用 promises 的现有库,但它不使用 bluebird。库函数不具备 bluebird 像 .map()
或 .tap()
那样的所有额外功能。如何将 "normal" 或 "non-bluebird" 承诺转换为 bluebird 承诺,并提供 bluebird 提供的所有额外功能?
我尝试将现有的承诺包装在 Promise.promisify
和 Promise.resolve
中,但似乎都不起作用。
使用 Promise.resolve
- 它会接受任何 thenable,比如来自其他实现的承诺,并将其吸收到 Bluebird 承诺中。
请记住,
如果您想将 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!"