Parse platform 如何将Parse.Promise与其他形式的Promise(如Bluebird/ES6原生承诺)混合使用?

Parse platform 如何将Parse.Promise与其他形式的Promise(如Bluebird/ES6原生承诺)混合使用?,parse-platform,promise,parse-cloud-code,bluebird,es6-promise,Parse Platform,Promise,Parse Cloud Code,Bluebird,Es6 Promise,我想在Heroku(节点)上运行我的一些Parse云代码,以启动Parse托管云代码的迁移过程 这两种环境之间的差异之一是,您使用的Parse SDK也不同。在节点上,我发现如果您执行 var Parse require('parse/node').Parse; 。。。然后,Parse.Cloud.httpRequest实际上丢失了 我正在寻找用于执行http请求的节点替代方案,并找到了。但是它与解析承诺不太相符: parsePromise1() .then(parsePromise2

我想在Heroku(节点)上运行我的一些Parse云代码,以启动Parse托管云代码的迁移过程

这两种环境之间的差异之一是,您使用的Parse SDK也不同。在节点上,我发现如果您执行

var Parse require('parse/node').Parse;
。。。然后,
Parse.Cloud.httpRequest
实际上丢失了

我正在寻找用于执行http请求的节点替代方案,并找到了。但是它与解析承诺不太相符:

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.

我想知道是否有人找到了更好的方法来转换解析承诺?谢谢。

您可以使用
request-promise
包,该包使用promises支持包装
request
,或者使用类似
bluebird
的库,该库公开了将回调API转换为promises的方法

我建议您从解析承诺迁移到ES2015本机承诺(或者更强大的替代方案,如bluebird)。有了这些,你可以:

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

同时避免
.done

这一点都不理想,但你可以使用这种包装,从原生蓝鸟到原生承诺:

    const Promise = require('bluebird')

    function handle () {
          return new Promise((resolve, reject) => {
           handleWithNativePromise(...arguments)
            .then(resolve)
            .catch(reject)
          })
    }

好吧,我已经找到了答案的哪一部分,哪一部分还需要回答?嗯!那是个好主意。只要把第一个包起来。这就避免了对Parse.Promise进行修补的需要,这让人感觉非常不舒服。我来试试。
Promise.resolve
的设计方式是,解析承诺被
Promise.resolve
安全地使用。