我正在尝试创建一个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请求,它必须等待第一个请求成功,并使用前一个响应填充其有效负载。有小费吗?? 谢谢!
答案 0 :(得分:0)
好的,我要回答我自己的问题 - 我接受了丹尼尔的建议,并使用了asyncs,它比承诺更容易阅读(至少对我来说!):
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);
}
}
强制两个查询按顺序运行,第二个查询必须等到第一个完成 - 这就是我想要的。如果没有这种依赖关系,您应该并行运行查询,如Daniel在asy上提供的链接中所述