CRI*_*RIS 4 javascript asynchronous xmlhttprequest google-chrome-extension es6-promise
在我的chrome扩展项目中,我使用ES6承诺从后台页面获取XHR的结果并将其发送到内容,但我得到的内容undefined值response.XHR工作正常,它返回一个值.
BTW,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;
Run Code Online (Sandbox Code Playgroud)
内容:
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;
Run Code Online (Sandbox Code Playgroud)
背景:
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
});
});
});
Run Code Online (Sandbox Code Playgroud)
我已经找到了答案,在developer.chrome.com,return true;需要在onMessage使铬会将其识别为异步的.我不知道这是为什么,因为我打电话的情况下sendResponse内部then的$.ajax
| 归档时间: |
|
| 查看次数: |
2515 次 |
| 最近记录: |