如何让一个单独的同步函数等待另一个异步函数?
How to make a separate a sync function wait for another async function?
我无法在另一个异步函数中回调异步函数。
我在控制台收到这个:
Promise {<pending>}
__proto__: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Object
script.js:127 TypeError: Cannot read property 'aWeatherObjProperty' of undefined
at callForecastAPI (script.js:121)
at HTMLInputElement.<anonymous> (script.js:138)
这是我的 JavaScript 代码:
function processSearchInput(searchInput) {
// does some math. No waiting required.
return processedSearchInput;
}
// processedSearchInput is an object
// Take processedSearchInput and call OpenWeather API
async function callWeatherAPI(processedSearchInput) {
const response = await fetch(`calling API`, { mode: 'cors' });
const weather = await response.json();
return weather;
}
// weather is an object
// Call OpenWeather Forecast API and return weatherForecast object
async function callForecastAPI(weatherObj) {
const response = await fetch(`calling API`);
const weatherForecast = await response.json();
return weatherForecast;
}
callForecastAPI(callWeatherAPI(processSearchInput(searchInput)));
我确定天气对象正在被 callWeatherAPI return 编辑,因为我可以 console.log 它就在 return 之前并且可以 return 它就在获取之前调用 ForecasrAPI。
预先感谢您的任何建议。
如果您尝试调用 callWeatherAPI()
并将其实际结果传递给另一个函数,那么您必须 await
它。它是一个 async
函数和所有 async
函数 return 一个承诺。 async
函数中的 return 值成为承诺的解析值。因此,要从承诺中获取价值,您可以使用 await
或 .then()
.
callForecastAPI(await callWeatherAPI(processSearchInput(searchInput)));
当然,这意味着此代码本身需要在 async
函数中,以便您可以使用 await
.
有关 async
如何始终 return 承诺的更多信息,请参阅 。
并且,callForecastAPI()
也是 async
,也是 return 的承诺,因此要获得实际的预测结果,您需要使用 await
或 .then()
也是如此。
const forecast = await callForecastAPI(await callWeatherAPI(processSearchInput(searchInput)));
或者,也许用一个中间变量更清楚:
const weather = await callWeatherAPI(processSearchInput(searchInput));
const forecast = await callForecastAPI(weather);
console.log(forecast);
我无法在另一个异步函数中回调异步函数。 我在控制台收到这个:
Promise {<pending>}
__proto__: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Object
script.js:127 TypeError: Cannot read property 'aWeatherObjProperty' of undefined
at callForecastAPI (script.js:121)
at HTMLInputElement.<anonymous> (script.js:138)
这是我的 JavaScript 代码:
function processSearchInput(searchInput) {
// does some math. No waiting required.
return processedSearchInput;
}
// processedSearchInput is an object
// Take processedSearchInput and call OpenWeather API
async function callWeatherAPI(processedSearchInput) {
const response = await fetch(`calling API`, { mode: 'cors' });
const weather = await response.json();
return weather;
}
// weather is an object
// Call OpenWeather Forecast API and return weatherForecast object
async function callForecastAPI(weatherObj) {
const response = await fetch(`calling API`);
const weatherForecast = await response.json();
return weatherForecast;
}
callForecastAPI(callWeatherAPI(processSearchInput(searchInput)));
我确定天气对象正在被 callWeatherAPI return 编辑,因为我可以 console.log 它就在 return 之前并且可以 return 它就在获取之前调用 ForecasrAPI。 预先感谢您的任何建议。
如果您尝试调用 callWeatherAPI()
并将其实际结果传递给另一个函数,那么您必须 await
它。它是一个 async
函数和所有 async
函数 return 一个承诺。 async
函数中的 return 值成为承诺的解析值。因此,要从承诺中获取价值,您可以使用 await
或 .then()
.
callForecastAPI(await callWeatherAPI(processSearchInput(searchInput)));
当然,这意味着此代码本身需要在 async
函数中,以便您可以使用 await
.
有关 async
如何始终 return 承诺的更多信息,请参阅
并且,callForecastAPI()
也是 async
,也是 return 的承诺,因此要获得实际的预测结果,您需要使用 await
或 .then()
也是如此。
const forecast = await callForecastAPI(await callWeatherAPI(processSearchInput(searchInput)));
或者,也许用一个中间变量更清楚:
const weather = await callWeatherAPI(processSearchInput(searchInput));
const forecast = await callForecastAPI(weather);
console.log(forecast);