Подтвердить что ты не робот

Конвертировать обещание в синюю птицу

Я нашел существующую библиотеку, которая использует promises, однако она не использует bluebird. Функции библиотеки не поставляются со всеми дополнительными функциями bluebird, как .map() или .tap(). Как преобразовать обещание "нормальное" или "не-синяя птица" в синюю птицу, со всеми дополнительными возможностями bluebird?

Я попытался обернуть существующее обещание в Promise.promisify и Promise.resolve, и ни один из них не работал.

4b9b3361

Ответ 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!"