如何在axios中的.then()链中访问先前的promise响应?

时间:2017-12-28 01:03:37

标签: javascript amazon-s3 axios

我需要访问responseA才能在链接请求中进一步访问字段值。怎么能优雅地完成呢?

  axios.get(`/endpoint`) 
            .then((responseA) => {
               // Do something with responseA
               return axios.put(signedUrl, file, options); 
            })
            .then((responseB) => {
               // Do something with responseA & responseB
            })
            .catch((err) => {
                console.log(err.message);
            });

更新:我应该提一下,在我的第一个.then()中,我返回另一个网络请求。它必须按顺序发生。

3 个答案:

答案 0 :(得分:2)

第一个.then()区块内发生了什么?理论上,您可以将您需要的值从responseA返回到第二个.then()块,因为从第一个then块返回的任何内容都将作为responseB提供。换句话说,它看起来像这样:

axios.get(`/endpoint`) 
        .then((responseA) => {
           // additional request/logic
           const moreData = someFunction()
           return { responseAdata: responseA.dataYouWant, moreData: moreData }
        })
        .then((responseB) => {
           // now responseA values will be available here as well, e.g.
           responseB.responseAdata
           // Do something with responseA & responseB
        })
        .catch((err) => {
            console.log(err.message);
        });

答案 1 :(得分:2)

您有很多选择可以做到这一点。

1)打破链条

let promiseA = axios.get(`/endpoint`) 
let promiseB = promiseA.then((responseA) => {
               // Do something with responseA
            })

return Promise.all([promiseA, promiseB]).then(function([responseA, responseB]) {
        // Do what you must
});

2)使用等待

let responseA = await axios.get('/endpoint/')
// You can figure out the rest

答案 2 :(得分:1)

您可以使用 protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.screenTwo); // <-- Add this line label = FindViewById<TextView>(Resource.Id.textView1); label.Text = Intent.GetStringExtra("Extra"); }

Promise.all