Как вы можете смешивать Parse.Promise с другими формами Promise, например, с Bluebird / ES6?

Я хочу запустить часть моего кода Parse Cloud на Heroku (Node), чтобы начать процесс миграции из размещенного Parse Cloud Code.

Одно из различий между этими двумя средами заключается в том, что Parse SDK, который вы используете, также отличается. На узле я обнаружил, что если вы делаете

var Parse require('parse/node').Parse;

... затем Parse.Cloud.httpRequest на самом деле отсутствует.

Я искал альтернативные варианты для выполнения http-запросов и нашел запрос. Но... это не очень хорошо вписывается в Parse Promises:

parsePromise1()
    .then(parsePromise2)     // okay
    .then(requestPromise)    // CUSTOM HTTP REQUEST!
    .done(parsePromise3)     // this Parse promise always succeeds, and occurs even before the request is fully completed.

Мне было интересно, если кто-нибудь нашел лучшие способы преобразования из обещаний Parse? Благодарю.

1 ответ

Вы можете использовать request-promise пакет, который упаковывает request с поддержкой обещаний или библиотеки, как bluebird это предоставляет метод, который преобразует API обратного вызова в обещания.

Я рекомендую вам перейти от обещаний Parse, которые неоптимальны к обещаниям ES2015 (или более мощным альтернативам, таким как bluebird). С теми, кого вы могли бы:

Promise.resolve(someParsePromise).then(() => // convert
     return someParsePromiseFn()// return some Parse promise, that works
}).then(res => {
     // more async work ...
});

И избегать .done в целом.

Это совсем не идеально, но вы можете использовать такую ​​оболочку от родного Bluebird до нативных обещаний:

    const Promise = require('bluebird')

    function handle () {
          return new Promise((resolve, reject) => {
           handleWithNativePromise(...arguments)
            .then(resolve)
            .catch(reject)
          })
    }
Другие вопросы по тегам