解决此问题时,Promiseparsing为null

我有一个连接到API的函数。 该函数返回一个Promise。 我不明白为什么Promise.resolve返回null,当我用包含this上下文的常量解决。

 const connect = () => { return new Promise((resolve, reject) => { Gitana.connect(config, function(err) { const platform = this; if (err) { return reject(err); } console.log(platform) // Object that I want resolve(platform) }); }); } connect() .then(platform => { console.log(platform) // null }) 

我不知道是否有任何帮助,但我知道parsing对象(平台)上有一种方法称为数据存储。 如果我解决该方法,即resolve(platform.datastore)我得到的方法,而不是null

我试图解决静态值, resolve(25)resolve('hello')并正常工作。

如何返回/parsing对象?

正如你所指出的,它看起来像是这样,因为你试图传递的值实际上有一个.then方法,所以它被包含在承诺parsing过程中。

一种不通过删除方法来传递的方法是将其包装在一个容器中,以便将其一起传输:

 const connect = () => { return new Promise((resolve, reject) => { Gitana.connect(config, function(err) { const platform = this; if (err) { return reject(err); } resolve({ platform }); }); }); } connect() .then(({ platform }) => { console.log(platform) }) 

原来那个platform ,要解决的对象,也有一个方法。 如果你用新的承诺解决了原来的承诺,那么它也会尝试解决新的承诺。 在这种情况下,新的承诺解决为null

 const connect = () => { return new Promise((resolve, reject) => { Gitana.connect(config, function(err) { const platform = this; if (err) { return reject(err); } delete platform.this; resolve(platform); }); }); } 

接下来的问题是如何以比删除每个过时的方法更好的方式来做到这一点。