Как написать метод, чтобы вернул нужный ответ?

Есть такой вот код:

checkID: function(id) {
        this.db.transaction(function (tx) {
            tx.executeSql("SELECT * FROM black WHERE id = ?", [id], function(tx,result){
                    if (result.rows.length > 0) {
                        //document.querySelector('#status').innerHTML += '<p>' + result.rows.item(0).link; + '</p>';
                        answer = {"id": result.rows.item(0).id, "link":result.rows.item(0).link};
                    } else {
                        //document.querySelector('#status').innerHTML += '<p>Не найдено</p>';
                        answer = {"clean": true};
                    }
                },
                function (tx, err) {
                    console.log(err);
                }
            );
        });
    },


Как сделать, чтобы метод возвращал результат answer? Единственое, что смог сделать - это вывести его через console.log внутри каллбэк функции, однако сам checkID возвращает undefined.
  • Вопрос задан
  • 2438 просмотров
Решения вопроса 1
yttrium
@yttrium
асинхронно
checkID: function(id, callback) {
        this.db.transaction(function (tx) {
            tx.executeSql("SELECT * FROM black WHERE id = ?", [id], function(tx,result){
                    var answer;
                    if (result.rows.length > 0) {
                        //document.querySelector('#status').innerHTML += '<p>' + result.rows.item(0).link; + '</p>';
                        answer = {"id": result.rows.item(0).id, "link":result.rows.item(0).link};
                    } else {
                        //document.querySelector('#status').innerHTML += '<p>Не найдено</p>';
                        answer = {"clean": true};
                    }
                    callback(null, answer);
                },
                function (tx, err) {
                    callback(err, answer);
                }
            );
        });
    },

использовать так
obj.checkID(id, function(error, answer){
    if (!error)
        console.log(answer);
});


UPDATE
Как правильно заметил @lexxpavlov локальные переменные должны быть объявлены локально с помощью var.
Ещё важно то, что бы callback сработал и в случае ошибки, и вернул соответствующее значение
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nobodynoone
@nobodynoone
Читайте про асинхронное и синхронное программирование в javascript.

answers = {
        answer = '';
};

checkID: function(id) {
        this.db.transaction(function (tx) {
            tx.executeSql("SELECT * FROM black WHERE id = ?", [id], function(tx,result){
                    if (result.rows.length > 0) {
                        //document.querySelector('#status').innerHTML += '<p>' + result.rows.item(0).link; + '</p>';
                        answers.answer = {"id": result.rows.item(0).id, "link":result.rows.item(0).link};
                    } else {
                        //document.querySelector('#status').innerHTML += '<p>Не найдено</p>';
                        answers.answer = {"clean": true};
                    }
                },
                function (tx, err) {
                    console.log(err);
                }
            );
        });
    },


Вот отличный пост на эту тему stackoverflow.com/questions/14220321/how-to-return...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы