Javascript:这个条件有什么问题?

时间:2010-12-19 23:05:48

标签: javascript ajax google-chrome-extension

我正在使用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',它是一个对象数组。我正在尝试查看队列中 的其他项 。例如,外面有一个id等于'198677'的项目。我知道我的队列中已经有一个完全相同ID的相同项目的精确副本,'198677',但是,当我测试两个相等的(items[i].id == id) == true时,它返回false。我检查了两者的类型,它们都是字符串。我尝试过使用===但是没有用。我尝试在每个中添加零以将它们变成整数,这使得函数在实际为真时返回true,但是,当我测试真if (isInQueue(id) == true)条件返回false时。

这对我来说非常令人困惑和沮丧。它们都是字符串,为什么它不起作用?

非常感谢帮助。

2 个答案:

答案 0 :(得分:6)

问题是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 :(得分:1)

我明白了:

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