Конвертировать обещание в синюю птицу
Я нашел существующую библиотеку, которая использует promises, однако она не использует bluebird. Функции библиотеки не поставляются со всеми дополнительными функциями bluebird, как .map()
или .tap()
. Как преобразовать обещание "нормальное" или "не-синяя птица" в синюю птицу, со всеми дополнительными возможностями bluebird?
Я попытался обернуть существующее обещание в Promise.promisify
и Promise.resolve
, и ни один из них не работал.
Ответы
Ответ 1
Используйте Promise.resolve
- он возьмет любое возможное, например обещание какой-то другой реализации, и ассимилирует его в обещание Bluebird.
Имейте в виду, что термин "решить" может вводить в заблуждение, он не означает то же самое, что "выполнить", но также может следовать другому обещанию и согласиться с его результатом.
Ответ 2
Если вы хотите преобразовать обещание в обещание bluebird, ничего не разрешите и верните customPromise
, тогда у вас будет доступ ко всем пользовательским методам bluebirds в цепочке.
Promise.resolve().then(function(){
return customPromise()
})
или
Promise.resolve(customPromise())
Ответ 3
Используйте 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
Ответ 4
Я использую метод Bluebird.resolve()
для преобразования нативного JS-обещания в Bluebird.resolve()
.
public getBatched(query: QueryBuilder | Raw): Bluebird<any> {
return Bluebird.resolve(this.cache.getBatched(query));
}
Ответ 5
В 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!"