我有以下代码:
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的值时,我没有得到variable
的值,而是得到
Promise {
<pending>,
domain:
Domain {
domain: null,
_events: { error: [Function: handleException] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
我确信在实际的const中,变量已被设置为正确的值。我只是不确定如何单独访问它。
我的问题很独特,因为对其他问题的解决方案不能解决此问题。
答案 0 :(得分:1)
一旦将值封装在Promise中,就不可能将其取回。这是设计使然。您被迫编写在.then
块上下文中使用封装值的代码。这样可以防止您在异步代码解析其值之前使用该值。
let test = importedFile.a.Top.fun().sub.variable.then((resp) => resp);
expect(test).to.equal(resp);
这不起作用,因为test
是Promise<typeof resp>
,而不是typeof resp
您需要执行类似的操作
importedFile.a.Top.fun().sub.variable.then((resp) => resp)
.then(value => {
expect(value).to.equal(resp);
});
答案 1 :(得分:-1)
那是因为您正在为变量分配一个Promise。如果您的getResponse()
函数返回了一个Promise,则与then
或catch
链接仍然会返回一个Promise,因此您可以继续将函数链接到您的Promise。您正在寻找的是这样的:
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
});