【发布时间】:2019-09-11 15:43:01
【问题描述】:
我正在开发一个 Google Chrome 扩展程序,它从两台服务器收集数据并将其发送到另一项服务。我不明白如何使它异步。这些请求似乎运行良好。
我在 Google 上搜索了一些解释,但只找到了一些带有超时的基本教程。此外,Product-Server 接受 Ajax 请求,而 Deal-Server 不接受(CORS 错误)。所以我使用了 XMLHttpRequest。
document.addEventListener("DOMContentLoaded", function () {
var createButton = document.getElementById("createButton");
createButton.addEventListener("click", function () {
getProducts();
getDeals();
}, false)
function getProducts() {
var list = [];
chrome.tabs.getSelected(null, function (tab) {
var Url = parseDealIdToUrl(tab.url)
$.get(Url, function (data, status) {
const jsonData = JSON.parse(JSON.stringify(data))
const productArray = jsonData.data
productArray.forEach(product => {
productList.push(new Product(product.id, product.deal_id, product.product_id, product.name, product.item_price, product.quantity, product.duration, product.discount_percentage, product.currency, product.sum, product.sum_formatted))
});
})
});
}
function getDeals(maxPages = 1, currentPage = 1, akquises = []) {
var akquiseList = akquises;
if (currentPage <= maxPages) {
var Url = dealUrl + currentPage
var xhr = new XMLHttpRequest();
xhr.open("GET", Url, true);
xhr.setRequestHeader("Authorization", "Token token=")
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
const akquiseArray = JSON.parse(xhr.responseText);
akquiseArray.forEach(akquise => {
akquiseList.push(new Akquise(akquise.name, akquise.id))
});
getDeals(handlePagination(xhr.getResponseHeader("Link")), currentPage + 1, akquiseList)
}
}
xhr.send();
}
}
}, false)
我想调用这两个函数并等到两个列表都填满,然后将数据发送到服务。任何想法都会帮助我!
【问题讨论】:
-
只是一个注释.. “Product-Server 也接受 Ajax 请求,Deal-Server 不接受(CORS 错误)。所以我使用了 XMLHttpRequest。” @ 987654322@ 或
$.ajax是XMLHttpRequest.从一个移动到另一个不一定是修复它的原因。 -
请求已经是异步的(默认情况下),所以我猜你想要的是承诺 getProducts 和 getDeals 并执行 Promise.all() + then()。应该有很多教程。
标签: javascript ajax asynchronous google-chrome-extension promise