如何在 chrome 扩展中将一系列 POST 请求链接在一起?
How to chain together a sequence of POST requests in a chrome extension?
我正在尝试创建一个 Chrome 扩展,它将发出一系列 POST 请求,每个请求的参数都取决于前一个请求的响应。我正在使用 fetch 执行此操作。我了解如何使用 .then 来处理单个查询的组件之间的依赖关系,但我将如何处理跨查询的依赖关系?所以目前我的扩展有像
这样的代码
fetch('http://localhost:8081/seed/create', {
method: 'post',
headers: new Headers({
'Accept': 'application/json, text/plain, */*',
"Content-Type": "application/json; charset=UTF-8"
}),
body: '{"name": "nutch","seedUrls":[{"seedList": null,"url": "http://nutch1.apache.org/"}]}'
})
.then(function (response) {
return response.text();
})
.then(function (text) {
seed = text;
console.log(seed);
document.getElementById("post").innerHTML = "responsePost: " + seed;
})
.catch(function (error) {
console.log('FAIL: ', error);
});
});
但我随后需要第二个 POST 请求,该请求必须等待第一个请求成功,并使用之前的响应填充其负载。有小费吗??
谢谢!
好的,我要回答我自己的问题 - 我采纳了 Daniel 的建议并使用了异步,这比 promises 更容易阅读(至少对我而言!):
async function getNutch(url) {
var response;
try {
response = await fetch(url + "seed/create", {
method: 'post',
headers: new Headers({
'Accept': 'application/json, text/plain, */*',
"Content-Type": "application/json; charset=UTF-8"
}),
body: getPayload(payloadEnums.SEED)
});
seedDir = await response.text();
console.log(seedDir);
} catch (err) {
console.log('fetch failed: ', err);
}
try {
response = await fetch(url + "job/create", {
method: 'post',
headers: new Headers({
'Accept': 'application/json, text/plain, */*',
"Content-Type": "application/json; charset=UTF-8"
}),
body: getPayload(payloadEnums.JOB)
});
console.log(await response.text());
} catch (err) {
console.log('fetch failed: ', err);
}
}
这会强制两个查询按顺序 运行,第二个查询必须等到第一个查询完成 - 这就是我想要的。如果没有这种依赖性,你应该 运行 并行查询,如 link Daniel 在 asy
上提供的解释
我正在尝试创建一个 Chrome 扩展,它将发出一系列 POST 请求,每个请求的参数都取决于前一个请求的响应。我正在使用 fetch 执行此操作。我了解如何使用 .then 来处理单个查询的组件之间的依赖关系,但我将如何处理跨查询的依赖关系?所以目前我的扩展有像
这样的代码 fetch('http://localhost:8081/seed/create', {
method: 'post',
headers: new Headers({
'Accept': 'application/json, text/plain, */*',
"Content-Type": "application/json; charset=UTF-8"
}),
body: '{"name": "nutch","seedUrls":[{"seedList": null,"url": "http://nutch1.apache.org/"}]}'
})
.then(function (response) {
return response.text();
})
.then(function (text) {
seed = text;
console.log(seed);
document.getElementById("post").innerHTML = "responsePost: " + seed;
})
.catch(function (error) {
console.log('FAIL: ', error);
});
});
但我随后需要第二个 POST 请求,该请求必须等待第一个请求成功,并使用之前的响应填充其负载。有小费吗?? 谢谢!
好的,我要回答我自己的问题 - 我采纳了 Daniel 的建议并使用了异步,这比 promises 更容易阅读(至少对我而言!):
async function getNutch(url) {
var response;
try {
response = await fetch(url + "seed/create", {
method: 'post',
headers: new Headers({
'Accept': 'application/json, text/plain, */*',
"Content-Type": "application/json; charset=UTF-8"
}),
body: getPayload(payloadEnums.SEED)
});
seedDir = await response.text();
console.log(seedDir);
} catch (err) {
console.log('fetch failed: ', err);
}
try {
response = await fetch(url + "job/create", {
method: 'post',
headers: new Headers({
'Accept': 'application/json, text/plain, */*',
"Content-Type": "application/json; charset=UTF-8"
}),
body: getPayload(payloadEnums.JOB)
});
console.log(await response.text());
} catch (err) {
console.log('fetch failed: ', err);
}
}
这会强制两个查询按顺序 运行,第二个查询必须等到第一个查询完成 - 这就是我想要的。如果没有这种依赖性,你应该 运行 并行查询,如 link Daniel 在 asy
上提供的解释