Доступ к данным предыдущего Обещания в цепочке - PullRequest
0 голосов
/ 09 июля 2019

моя проблема в том, что я хочу получить доступ к данным, извлеченным из предыдущего 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 ]

2 голосов
/ 09 июля 2019

Вы можете использовать только один оператор 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 голос
/ 09 июля 2019

Вы можете сохранить 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
    }
...