如何从异步函数中访问asyncawait作用域变量?

问题描述 投票:-1回答:1

我想使用 cafesListplaceList 变量,这样我就可以将这两个包含对象数组的变量传递给另一个函数,在那里我将把这两个变量的数据合并到一个对象数组中。

我试着将这两个变量声明为全局变量,并试着在外部使用,但得到的输出如下----------。

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!");
    });
}

这两个asyncawait方法包含了 cafesListplaceList 可变

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);
  }
}
javascript ecmascript-6
1个回答
1
投票

这对你来说是切割吗?

返回函数中的数据。

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...
});
© www.soinside.com 2019 - 2024. All rights reserved.