Javascript 无法从承诺中获取对象
我有以下代码:Javascript 无法从承诺中获取对象,javascript,callback,promise,es6-promise,Javascript,Callback,Promise,Es6 Promise,我有以下代码: const a = { Top: { fun: () => { return { sub: { variable: getResponse().then((response) => response) } }; } } }; getResponse()返回一个Promi
const a = {
Top: {
fun: () => {
return {
sub: {
variable: getResponse().then((response) => response)
}
};
}
}
};
getResponse()返回一个Promise.resolve()
然后,我尝试通过执行以下操作获取另一个文件中变量的值:
let test = importedFile.a.Top.fun().sub.variable.then((resp) => resp);
但是当我打印出test的值时,我得到的不是变量的值,而是
承诺{
,
域:
领域{
域:空,
_事件:{错误:[函数:handleException]},
_事件提示:1,
_maxListeners:未定义,
成员:[]}
我确信在实际常量中,变量被设置为正确的值。我只是不确定如何单独访问这个
我的问题是唯一的,因为另一个问题的解决方案不能解决这个问题。这是因为您为变量指定了承诺。如果您的getResponse()
函数返回承诺,则使用链接,则
或catch
仍将返回承诺,以便您可以继续将函数链接到承诺。您正在寻找的是以下内容:
importedFile.a.Top.fun().sub.variable.then(response => {
// Continue executing code based on the value of this variable...
// Where 'response' is equal to what you intended 'test' to be from your original post
});
一旦一个值被封装在一个承诺中,就不可能将其收回。这是故意的。您必须编写在块的上下文中使用封装值的代码。这会阻止您在异步代码解析该值之前使用该值
let test = importedFile.a.Top.fun().sub.variable.then((resp) => resp);
expect(test).to.equal(resp);
这不起作用,因为测试
是承诺
,而不是类型的resp
你需要这样做
importedFile.a.Top.fun().sub.variable.then((resp) => resp)
.then(value => {
expect(value).to.equal(resp);
});
((响应)=>resp)
?什么是resp
?然后调用的结果仍然是一个承诺<代码>然后((x)=>x)
没有做任何有用的事情。您需要在回调中使用response
。@mpm然后呢<代码>测试
不用于你的然后
回调。可能重复的可能重复,或者当你简单地谷歌“js然后返回承诺而不是值”时的任何问题。你也可以阅读.user8895105,听听别人告诉你什么。所有的评论和两个答案都在说同一件事。你的问题绝非独一无二。许多第一次遇到承诺的人都会遇到同样的问题。一旦你成功地将注意力集中在承诺上,他们将是你最好的朋友。将解析值指定给承诺上下文之外的变量通常是个坏主意。承诺异步执行,因此无法保证何时分配test
的值。如果在示例后面的行中使用了test
,则它可能是未定义的
。