Javascript: Что не так с этим условным? - PullRequest
1 голос
/ 20 декабря 2010

Я работаю над расширением Chrome и ударился о стену.

function isInQueue(id) {
    chrome.extension.sendRequest({getQueueItems: 1}, function(response) {
        var items = response.items;
        if (items) {
            for (var i = 0; i < items.length; i++) {
                if ((items[i].id == id) == true) return true;
            }
            return false;
        } else { return false; }
    });
}

Запрос возвращает «items», представляющий собой массив объектов. Я пытаюсь увидеть, существует ли другой элемент вне очереди внутри очереди. Например, снаружи есть элемент с идентификатором, равным '198677'. Я знаю, что у меня уже есть точная копия этого же элемента в моей очереди с точно таким же идентификатором, '198677', однако, когда я проверяю оба на равенство (items[i].id == id) == true, он возвращает false. Я проверил typeof оба, и они оба строки. Я попытался использовать ===, и это не сработало. Я попытался добавить ноль к каждому из них, чтобы превратить их в целые числа, и это заставило функцию возвращать истину, когда она действительно была истинной, однако, когда я проверял на истину if (isInQueue(id) == true), условное возвращение ложно.

Это все очень смущает и расстраивает меня. Они обе строки, почему не работает?

Помощь очень ценится.

Ответы [ 2 ]

6 голосов
/ 20 декабря 2010

Проблема в том, что chrome.extension.sendRequest асинхронный - он возвращается немедленно, но функция обратного вызова, которую вы ему предоставляете, будет вызываться только после завершения запроса.

Обычный способ обработки чего-либо подобного заключается впередать обратный вызов вашему isInQueue методу;обратный вызов вызывается, когда асинхронная операция завершается с результатом.

function isInQueue(id, callback) {
    chrome.extension.sendRequest({getQueueItems: 1}, function(response) {
        var result = false;
        var items = response.items;
        if (items) {
            for (var i = 0; i < items.length; i++) {
                if ((items[i].id == id) == true) {
                  result = true;
                  break;
                }
            }
        }
        callback(result);
    });
}
1 голос
/ 20 декабря 2010

Я понял это:

function isInQueue(id) {
    var result = false;
    var queue = localStorage["queue_rss"];
    if (queue != undefined) {
        var items = JSON.parse(queue).items;
        if (items) {
            for (var i = 0; i < items.length; i++) {
                if ((items[i].id == id) == true) {
                  result = true;
                  break;
                }
            }
        }
    }
    return result;
}

Я должен был сделать это таким образом.Спасибо, парни.: D

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