嵌套的承诺?如何在退回的承诺中获取价值?

时间:2020-02-29 22:38:42

标签: node.js reactjs request-promise

此代码来自React应用。 Twitch扩展示例项目中提供了makeCall函数。我正在用它来为我的扩展程序调用后端服务器。

makeCall(url, method="GET"){
    return new Promise((resolve, reject)=>{
        if(this.isAuthenticated()){
            let headers={
                'Content-Type':'application/json',
                'Authorization': `Bearer ${this.state.token}`
            }

            fetch(url,
                {
                    method,
                    headers,
                })
                .then(response=>resolve(response))
                .catch(e=>reject(e))
        }else{
            reject('Unauthorized')
        }
    })
}

我可以访问响应,但是不确定上面这段代码.then(response=>resolve(response))的含义。当我打电话给makeCall时,它返回一个Promise,但是我在下面访问的响应显示了响应中的Promise,并且我不确定如何访问其中的值:

this.Authentication.makeCall(bitpostConstants.GET_STATUS_URL)
            .then(response=>{
                if(response.status!=200) {
                    console.log('Error getting status.');
                } else {

                    var responseJson = response.json();
                    console.log('Response', responseJson);

                    // How do I access 'twitterConnected'? This is showing as undefined.
                    console.log('Twitter connected: ' + responseJson.twitterConnected);

下面是浏览器开发工具的日志,其中显示了我尝试访问的属性(twitterConnected),但是如果我尝试通过以上responseJson.twitterConnected访问它,则显示为未定义:

  __proto__: Promise
  [[PromiseStatus]]: "resolved"
  [[PromiseValue]]: Object
    twitterConnected: false
    __proto__: Object

  Twitter connected: undefined

1 个答案:

答案 0 :(得分:0)

this.Authentication.makeCall(bitpostConstants.GET_STATUS_URL)
            .then(response=>{
                if(response.status!=200) {
                    console.log('Error getting status.');
                } else {

                    response.json().then(responseJson => {
                      console.log('Response', responseJson);
                      console.log('Twitter connected: ' + responseJson.twitterConnected);
})