Я не могу понять, почему следующее Javascript asyn c await не работает.
async function fetchDataAndComputeSomething (ids) {
let response
if (ids && ids.length > 0) {
// ids specified, fetch some data with same ids from service.
response = await fetchDataWrapper (ids)
console.log('IfBlockResponse = ' + JSON.stringify(response, null, 4))
// do something specific with response data here.
} else {
// ids not specified, use null to get all data from service.
response = await fetchDataWrapper (null)
console.log('ElseBlockResponse = ' + JSON.stringify(response, null, 4))
// do something different with response data here.
}
}
async function fetchDataWrapper (ids) {
let dicToReturn = {}
const responseData = await actualFetchDataMethod(ids)
for (let i = 0; i < responseData.length; i++) {
let responseItem= responseData[i]
dicToReturn [responseItem.id] = responseItem
}
return dicToReturn
}
, но это нормально.
async function fetchDataAndComputeSomething (ids) {
let response
if (ids && ids.length > 0) {
// ids specified, fetch some data with same ids from service.
response = await fetchDataWrapper (ids)
} else {
// ids not specified, use null to get all data from service.
response = await fetchDataWrapper (null)
}
console.log('Response = ' + JSON.stringify(response, null, 4))
if (something) {
// do something specific with response data here.
} else {
// do something different with response data here.
}
}
async function fetchDataWrapper (ids) {
let dicToReturn = {}
const responseData = await actualFetchDataMethod(ids)
for (let i = 0; i < responseData.length; i++) {
let responseItem= responseData[i]
dicToReturn [responseItem.id] = responseItem
}
return dicToReturn
}
Первый пример: ответ - это словарь моих ожидаемых ключей, но значения равны нулю. Во втором примере ответ представляет собой словарь моих ожидаемых ключей и ожидаемых значений.
Каким-то образом, когда код находится в том же блоке if, он получает неправильное значение. Но если я помещу код вне блока if, он будет ждать реальных данных. Как вы можете видеть, я должен продублировать условие if, поэтому logi c может быть запущен вне блока if, содержащего ожидание. Я могу сделать это как обходной путь, но я не знаю точно, почему первый пример не работает.