无法从诺言中得到对象

时间:2018-08-01 18:16:50

标签: javascript callback promise es6-promise

我有以下代码:

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中,变量已被设置为正确的值。我只是不确定如何单独访问它。

我的问题很独特,因为对其他问题的解决方案不能解决此问题。

2 个答案:

答案 0 :(得分:1)

一旦将值封装在Promise中,就不可能将其取回。这是设计使然。您被迫编写在.then块上下文中使用封装值的代码。这样可以防止您在异步代码解析其值之前使用该值。

let test = importedFile.a.Top.fun().sub.variable.then((resp) => resp);
expect(test).to.equal(resp); 

这不起作用,因为testPromise<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,则与thencatch链接仍然会返回一个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
});