首页 > 解决方案 > 打字稿数组变量不可访问

问题描述

我需要一些帮助才能从函数调用 seachResults2 返回 myArray。当我执行控制台日志时,编译器告诉我它找不到 myArray。我希望能够将 myArray 返回给调用者。

const searchResults2 = (query: string) => {
    const subscriptionKeyCredential = new atlasService.SubscriptionKeyCredential(
      "SUBSCRIPTION"
    );
    const pipeline = atlasService.MapsURL.newPipeline(subscriptionKeyCredential);
    const searchURL = new atlasService.SearchURL(pipeline);
    searchURL
      .searchAddress(atlasService.Aborter.timeout(10000), query)
      .then((response) => {
        const data2 = response.geojson.getFeatures();
       
        const myArray = new Array(data2.features.length)
          .fill(0)
          .map((item, idx) => {
            const category: string = data2.features[idx].id as string;
            return {
              value: category,
              label: labelElement(query, category),
            };
          });
      });
   console.log(myArray);  // Cannot find name 'myArray'
   //return myArray  cant do since its not accessable.
  };

const labelElement = (query: string, category: string) => {
    return (
      <div
        style={{
          display: "flex",
          justifyContent: "space-between",
        }}
      >
        <span>
          Found {query} on <a>{category}</a>
        </span>
        <span>{getRandomInt(200, 100)} results</span>
      </div>
    );
    }

它被称为这样。

 const [options, setOptions] = useState<SelectProps<unknown>["options"]>([]);

  const handleSearch = (value: string) => {
    setOptions(value ? searchResults2(value) : []);
  };

这是关于变量范围的问题。

标签: javascriptreactjstypescript

解决方案


在这种情况下,您可以尝试使用 async/away 并myArray从 Promise 之一返回,它将自动包装在 Promise 中

const searchResults2 = async (query: string) => {
    const subscriptionKeyCredential = new atlasService.SubscriptionKeyCredential(
        "SUBSCRIPTION"
    );
    const pipeline = atlasService.MapsURL.newPipeline(subscriptionKeyCredential);
    const searchURL = new atlasService.SearchURL(pipeline);
    let myArray = await searchURL
            .searchAddress(atlasService.Aborter.timeout(10000), query)
        .then((response) => {
            const data2 = response.geojson.getFeatures();

            return new Array(data2.features.length)
                .fill(0)
                .map((item, idx) => {
                    const category: string = data2.features[idx].id as string;
                    return {
                        value: category,
                        label: labelElement(query, category),
                    };
                }); // you can keep it as const but log it in this level
        });
        
        
    console.log(myArray); 
};

推荐阅读