1
私のクロムエクステンションプロジェクトでは、ES6の約束を使ってバックグラウンドページからXHRの結果を得て、それをコンテンツに送信していますが、をresponse
コンテンツ内にXHRは正常に動作し、値を返します。chrome.runtimeメッセージシステムで約束を使用する
ところで、queue.jsはES6の約束のための私の小さな砂糖です。
queue.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
});
});
});
注: 'return true;'のトピックに関する正式な質問と同じように、私はこれを二重に閉じたが、私も両方をupvotedそれはきれいな質問であり、良い自己回答です。標準的なQを指していても、それは価値があります。 – Xan