Вложенные обещания? Как получить доступ к значению в возвращенном обещании? - PullRequest
0 голосов
/ 01 марта 2020

Этот код взят из приложения React. Функция makeCall была предоставлена ​​в примере проекта расширения Twitch. Я использую его для вызова внутреннего сервера для моего внутреннего номера.

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, он возвращает обещание, но ответ, к которому я обращаюсь, ниже показывает Обещание внутри ответа, и я не уверен, как получить доступ к значению там:

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 голосов
/ 01 марта 2020
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);
})
...