如何在chrome扩展中将一系列POST请求链接在一起?

时间:2017-04-16 21:27:29

标签: javascript google-chrome google-chrome-extension fetch

我正在尝试创建一个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请求,它必须等待第一个请求成功,并使用前一个响应填充其有效负载。有小费吗?? 谢谢!

1 个答案:

答案 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上提供的链接中所述