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

Cha*_*now 1 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; }
    });
}
Run Code Online (Sandbox Code Playgroud)

请求返回'items',它是一个对象数组.我想看看其他项目以外的队列已经存在内部队列中.例如,外面有一个id等于'198677'的项目.我知道我已经在我的队列中有一个完全相同的ID,'198677'的相同项目的精确副本,但是,当我测试两个是否相等时(items[i].id == id) == true,它返回false.我检查了两者的类型,它们都是字符串.我尝试过使用===,但是没有用.我尝试在每个中添加零以将它们转换为整数,并且当函数实际为真时使该函数返回true,但是,当我测试为true时if (isInQueue(id) == true),条件返回false.

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

非常感谢帮助.

sje*_*397 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);
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上,`sendRequest`**会立即返回**而不等待其回调函数执行而不是'不立即返回'.不等待回调函数执行部分是因为回调函数无法返回值. (2认同)