访问链中上一个Promise中的数据

时间:2019-07-09 15:12:38

标签: javascript ecmascript-6 es6-promise

我的问题是我想访问从先前的then()获取的数据,我该怎么办? (要求:我无法修改externalBuiltInFunction())

ajaxCall(...)
.then( (response) => {                          
    return response.json();
})
.then ( (jsonData) => {
    return externalBuiltInFunction(jsonData);
})
.then ((dataFromExternalFunction) => {
   ... here i want to use jsonData, how can i do ?...
}

寻求帮助

2 个答案:

答案 0 :(得分:2)

您只能在then中使用一个async/await语句:

ajaxCall(...)
  .then(async response => {                          
    const jsonData = await response.json();
    const external = await externalBuiltInFunction(jsonData);
    // Here you still have access to jsonData and external 
  })

答案 1 :(得分:1)

您可以将jsonData存储在外部词汇环境中的变量中:

let jsonData;

ajaxCall(...)
    .then( (response) => {
        return response.json();
    })
    .then ( (jsonData) => {
        jsonData = jsonData;
        return externalBuiltInFunction(jsonData);
    })
    .then ((dataFromExternalFunction) => {
        // jsonData is available here
    }

或者,您可以将jsonData作为数组显式传递给下一个.then,并产生externalBuiltInFunction调用的结果:

ajaxCall(...)
    .then( (response) => {
        return response.json();
    })
    .then ( (jsonData) => {
        return Promise.all([externalBuiltInFunction(jsonData), jsonData]);
    })
    .then (([dataFromExternalFunction, jsonData]) => {
        // jsonData is available here
    }