javascript - 在 chrome.runtime 消息系统中使用 promises

标签 javascript asynchronous google-chrome-extension xmlhttprequest es6-promise

<分区>

在我的 chrome 扩展项目中,我使用 ES6 promise 从后台页面获取 XHR 结果并将其发送到内容,但我得到 undefined 作为 response 内容。 XHR 工作正常,它返回一个值。

顺便说一句,queue.js 只是我对 ES6 promise 的小糖。

队列.js

function defer() {
    let resolve = null;
    let reject = null;
    let promise = new Promise((_resolve, _reject) => {
        resolve = _resolve;
        reject = _reject;
    });

    return {
        'promise': promise,
        'resolve': resolve,
        'reject': reject
    };
}

module.exports = defer;

内容:

let Q = require('./queue');
let cb = Q();

function callback(response) {
    if (response) {
        let {result, data} = response;

        if (result === 'OK') {
            cb.resolve(data);

        } else if (result === 'KO') {
            cb.reject(data);
        }
    }
}

chrome.runtime.sendMessage({
    'event':'some_event',
    'data': {
        'user': 'test',
        'password': '1234'
    }
}, callback);

return cb.promise;

背景:

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
    $.ajax({
        'url': 'I intentionally removed the URL to protect the innocent.',
        'method': 'POST',
        'dataType': 'json',
        'contentType': 'application/json; charset=UTF-8',
        'data': JSON.stringify({
            'username': message.data.user,
            'password': message.data.password
        })
    }).then((xhr) => {
        sendResponse({
            'result': 'OK',
            'data': xhr.token
        });
    }).fail((xhr) => {
        sendResponse({
            'result': 'KO',
            'data': null
        });
    });
});

最佳答案

我找到了答案,在developer.chrome.com中,return true;需要在onMessage中,这样chrome才会将其识别为异步。我不知道为什么会这样,因为我在 $.ajax

then 中调用了 sendResponse

关于javascript - 在 chrome.runtime 消息系统中使用 promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37130066/

相关文章:

javascript - 当在 javascript 函数内动态创建 div 时,jquery 的单击事件不起作用,除非在页面加载时它起作用

c# - 在同一个 SqlDataReader 上混合异步和非异步调用是否存在任何已知问题?

java - @Asynchronous 是否有超时

javascript - 获取 YouTube 网站中的 Flash 视频状态 - Chrome 扩展

google-chrome-extension - 修改请求正文

javascript - moment.js startOf 问题

javascript - Webpack 2中fontgen loader的使用

javascript - 将 jquery 中的 live() 替换为 on()

java - Vertx http 服务器仅使用一个工作线程实例

javascript - 如何使用 Chrome 扩展程序删除网站中的 div?