Возвращенное Обещание с Fetch не отвечает на .then () - PullRequest
0 голосов
/ 03 ноября 2019

Я немного запутался, эта часть асинхронного кода не работает. Вот проблема:

export async function active() {
    return new Promise(function(resolve,reject){
        fetch("https://api.spotify.com/v1/me", { //omitted headers to keep it clean
        }).then(response => console.log(response)) <-- This code runs, and will log a response
        .then(data => function(){ <-- but this won't
            console.log("This won't run either")
            if (data.status == 200) {
                console.log(true)
                resolve(data)
            } else {
                console.log(false)
                reject(data)
            }
        })
    })
}

Почему не запускается вторая часть? Извините, я немного новичок в async / await

1 Ответ

5 голосов
/ 03 ноября 2019

Там есть несколько проблем

  1. .then(data => function(){ передает функцию, которая возвращает функцию в .then. Вы хотите либо функцию стрелки или ключевое слово function, но не оба. Поскольку все, что вы делаете - это возвращаете функцию (которую ничего не вызывает), вы не видите, что содержимое этой функции выполняется. Избавьтесь от function() части этого.

  2. Нет никаких оснований для new Promise в этом коде (и нет причин для вашей функции быть async), просто используйтеЦепочка обещаний у вас от fetch. (Подробнее здесь .)

  3. Ваш первый обработчик then возвращает undefined, поскольку вы возвращаете результат console.log.

  4. В вашем коде используется имя data, где вы все еще имеете дело с Response объектом, тело которого вы еще не прочитали. Вы, вероятно, хотите прочитать тело, используя .text(), .json() или другие подобные методы чтения тела.

Вместо этого:

export function active() {
    return fetch("https://api.spotify.com/v1/me", { //omitted headers to keep it clean
    })
    .then(response => {
        if (!repsonse.ok) {
            throw new Error("HTTP status " + response.status);
        }
        return response.text(); // or `.json()` or several others, see #4 above
    });
}

ПримечаниеЯ немного изменил чек на успех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...