Почему моя функция обратного вызова запускается каждый раз, даже когда false? - PullRequest
0 голосов
/ 22 сентября 2019

Я изучаю обратные вызовы, но я думаю, что где-то допустил ошибку, но не уверен, почему мой код следующий.Код работает в обоих случаях, даже если URL-адрес неверен или содержит опечатку и дважды ошибка Ошибка является консольной.

function getTodos(callback){
    const request = new XMLHttpRequest();
    request.addEventListener("readystatechange", function(){
        if(request.readyState === 4){
            callback(undefined, console.log(request.responseText))
        }else{
            callback("Error")
        }
    })
    request.open("GET", "https://jsonplaceholder.typicode.com/todos/1");
    request.send();
}

getTodos(function callback(err, data){
   if(err){
       console.log(err)
   }else{
       console.log(data);
   }
});

Мне потребовались дни, чтобы понять это, но я не был уверен, правильно ли я понял.

1 Ответ

0 голосов
/ 22 сентября 2019

Состояние готовности 4 будет означать, что вы закончили с вашим запросом.Этот пример покажет вам различные уровни readyState.

var xhr = new XMLHttpRequest();
console.log('UNSENT', xhr.readyState); // readyState will be 0

xhr.open('GET', '/api', true);
console.log('OPENED', xhr.readyState); // readyState will be 1

xhr.onprogress = function () {
    console.log('LOADING', xhr.readyState); // readyState will be 3
};

xhr.onload = function () {
    console.log('DONE', xhr.readyState); // readyState will be 4
};

xhr.send(null);

Более подробную информацию можно найти здесь https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState

При использовании обратного вызова, здесь есть простая функция, которая принимает имя пользователяи функцию обратного вызова, эта функция будет использовать setState для установки текущего состояния, затем она запустит свою функцию обратного вызова, так как я буду вызывать ее после setState.

function one(username, blah) {
   this.setState({
       username: username 
   })
   blah()
} 

Итак, теперь у вас есть готовая функция,он примет имя пользователя setState и затем запустит ЛЮБУЮ функцию, переданную при вызове.

function two() {
 console.log('WOOOHOO We got a username and set state');
}
function three() {
 console.log('O joy we got a username');
}

Теперь я покажу вам, как вызывать вас.

one('Bob', two) // Output: WOOOHOO We got a username and set state
one('Bob', three) // O joy we got a username 

Как видите, мы вызываем одну и ту же функцию 'one', но переданные функции различны в двух примерах.

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