Как вы можете смешивать 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)
})
}