我有一个连接到API的函数。该函数返回一个Promise。当我使用包含this
上下文的常量进行解析时,我无法弄清楚为什么Promise.resolve返回null。
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
})
我不知道它是否有任何帮助,但我知道解析对象(平台)上有一个名为datastore的方法。如果我解决了这个方法,即resolve(platform.datastore)
我得到了方法,而不是null
我尝试解析静态值,resolve(25)
或resolve('hello')
,这样可以正常工作。
如何返回/解析对象?
答案 0 :(得分:2)
正如您所指出的,看起来这种情况正在发生,因为您尝试传递的值实际上有一个.then
方法,因此它被包含在承诺解析程序中。< / p>
传递它而不删除方法的一种方法是将其包装在容器中以便传输它:
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)
})
答案 1 :(得分:1)
事实证明,要解决的对象platform
也有then
方法。如果您使用新承诺解决原始承诺,那么它也会尝试解析新承诺。在这种情况下,新承诺将解析为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);
});
});
}
接下来的问题是如何以更好的方式执行此操作,而不是删除每个过时的then
方法。