javascript - 如何从 async 函数中访问 async/await 范围变量?
问题描述
我想使用async/await 函数中cafesList
的placeList
变量,以便我可以将这两个包含对象数组的变量传递给另一个函数,在该函数中,我将把这两个变量数据组合到一个对象数组中。
我试图将这两个变量声明为全局变量并尝试在外部使用但得到如下输出 -
Promise {<pending>}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: undefined
但是当fetchCafes()
直接fetchPlaces()
调用时,这些函数会产生对象数组作为结果。
这是 fetch api 方法 -
function sendHttpRequest(method, url) {
return fetch(url, {
method: method,
})
.then((response) => {
if (response.status >= 200 && response.status < 300) {
return response.json();
} else {
return response.json().then((errData) => {
console.log(errData);
throw new Error("Something went wrong! - Server Side");
});
}
})
.catch((error) => {
console.log(error);
throw new Error("Something went wrong!");
});
}
这些是包含cafesList
和placeList
变量的两个 async/await 方法 -
async function fetchCafes() {
try {
const cafesList = await sendHttpRequest(
"GET",
"https://raw.githubusercontent.com/debojyoti/places-fake-rest-api/master/cafes.json"
);
console.log(cafesList);
} catch (error) {
console.log(error.message);
}
}
async function fetchPlaces() {
try {
const placeList = await sendHttpRequest(
"GET",
"https://raw.githubusercontent.com/debojyoti/places-fake-rest-api/master/places.json"
);
console.log(placeList);
} catch (error) {
console.log(error.message);
}
}
解决方案
这是给你剪的吗?
从函数返回数据:
async function fetchCafes() {
try {
const cafesList = await sendHttpRequest(
"GET",
"https://raw.githubusercontent.com/debojyoti/places-fake-rest-api/master/cafes.json"
);
console.log(cafesList);
return cafesList;
} catch (error) {
console.log(error.message);
}
}
async function fetchPlaces() {
try {
const placeList = await sendHttpRequest(
"GET",
"https://raw.githubusercontent.com/debojyoti/places-fake-rest-api/master/places.json"
);
console.log(placeList);
return placeList;
} catch (error) {
console.log(error.message);
}
}
调用这两个函数并等待它们完成。然后处理结果:
Promise.all([fetchCafes(), fetchPlaces()]).then(arr => {
const cafes = arr[0];
const places = arr[1];
// merge them here...
});
推荐阅读
- ios - Swift,将节点添加到 SCNNode 并放置在角落
- xml - 使用 Powershell 加载 XML 时出现问题
- c# - 如何从 WPF 表单上的一个按钮调用两种方法(C#)
- django - Django从html模板中的视图循环列表
- angular - ng2-file-upload 不适用于 Angular 6
- java - 将 android studio 更新到 3.2 后出现错误
- solace - 硬件清单脚本-Solace Appliances
- java - HSSFWorkbook - 为不同的值编写带有单独列的 excel 数据
- ios - KVO 不适用于 NSManagedObject 的自定义属性
- mesh - 为什么使用选项'删除未引用的顶点后所有顶点都被删除