簡體   English   中英

使用 Async Function 返回更多結果

[英]Using Async Function to return more results

我在 Wix builder 中有一個包含 3000 行的數據集。 Wix 有 1000 次退貨的限制,但是他們在這里建議了一種解決方法: https://www.wix.com/velo/forum/coding-with30-velo-velo

我正在嘗試將其添加到我的代碼中,但是我不知道需要將其插入到哪里,有人可以幫我嗎? 我的代碼如下:

import wixData from 'wix-data';

$w.onReady(function () {
    uniqueDropDown1();
});

function uniqueDropDown1 (){
    wixData.query("Products")
         .limit(1000) 
         .ascending("Manufacturer")
      .find()
      .then(results => {
           const uniqueTitles = getUniqueTitles(results.items); 
           $w("#dropdown1").options = buildOptions(uniqueTitles); 
      });
     function getUniqueTitles(items) {
     const titlesOnly = items.map(item => item.Manufacturer);
     return [...new Set(titlesOnly)];
    }
    function buildOptions(uniqueList) { 
        return uniqueList.map(curr => {
            return {label:curr, value:curr}; 
        });
    }
 }
 export function dropdown1_change(event) {
 uniqueDropDown2(); 
 $w("#dropdown2").enable();
 function uniqueDropDown2 (){
    wixData.query("Products")
        .contains("Manufacturer", $w("#dropdown1").value)
        .limit(1000) 
        .ascending("Model")
      .find()
      .then(results => {
           const uniqueTitles = getUniqueTitles(results.items); 
           $w("#dropdown2").options = buildOptions(uniqueTitles);
      });

  function getUniqueTitles(items) {
        const titlesOnly = items.map(item => item.Model);
     return [...new Set(titlesOnly)];
    }
    function buildOptions(uniqueList) { 
        return uniqueList.map(curr => {
            return {label:curr, value:curr}; 
        });
    }
}
}

export function dropdown2_change(event) {
    uniqueDropDown3(); 
    $w("#dropdown3").enable();
    function uniqueDropDown3 (){
    wixData.query("Products")
        .contains("Model", $w("#dropdown2").value)
        .limit(1000) 
        .ascending("Part")
      .find()
      .then(results => {
           const uniqueTitles = getUniqueTitles(results.items); 
           $w("#dropdown3").options = buildOptions(uniqueTitles); 
      });
}

  function getUniqueTitles(items) {
        const titlesOnly = items.map(item => item.Part);
     return [...new Set(titlesOnly)];
    }
    function buildOptions(uniqueList) { 
        return uniqueList.map(curr => {
            return {label:curr, value:curr}; 
        });
    }
}

我認為我需要以某種方式合並以下內容,但我完全不知道如何:

async function fetchData() {
const firstPage = await wixData.query('collection')
.limit(1000)
.find();

const secondPage = await wixData.query('collection')
.limit(1000)
.skip(1000)
.find();

const thirdPage = await wixData.query('collection')
.limit(1000)
.skip(2000)
.find();

const allItems = firstPage.items.concat(secondPage.items).concat(thirdPage.items);
  return allItems;
  }

提前感謝您的所有幫助。 數據集稱為產品,列是制造商、Model 和零件。

試試這個。

我重構了代碼以使用findAll function,它下載所有項目(受WixDataQuery API 參考中的retrieveAllItems啟發)

import wixData from 'wix-data';

$w.onReady(function () {
    uniqueDropDown1();
});

// New function. Downloads all items sequentially in batches of 1000
async function findAll(wixDataQuery) {
    let allItems = [];
    let results = await wixDataQuery.limit(1000).find();
    allItems.push(results.items);
    while (results.hasNext()) {
        results = await results.next();
        allItems.push(results.items);
    }
    return allItems;
}

function uniqueDropDown1() {
    // Changed this
    findAll(
        wixData.query("Products")
            .ascending("Manufacturer")
    ).then(results => {
        const uniqueTitles = getUniqueTitles(results);
        $w("#dropdown1").options = buildOptions(uniqueTitles);
    });

    function getUniqueTitles(items) {
        const titlesOnly = items.map(item => item.Manufacturer);
        return [...new Set(titlesOnly)];
    }
    function buildOptions(uniqueList) {
        return uniqueList.map(curr => {
            return { label: curr, value: curr };
        });
    }
}
export function dropdown1_change(event) {
    uniqueDropDown2();
    $w("#dropdown2").enable();
    function uniqueDropDown2() {
        // Changed this
        findAll(
            wixData.query("Products")
                .contains("Manufacturer", $w("#dropdown1").value)
                .ascending("Model")
        ).then(results => {
            const uniqueTitles = getUniqueTitles(results);
            $w("#dropdown2").options = buildOptions(uniqueTitles);
        });

        function getUniqueTitles(items) {
            const titlesOnly = items.map(item => item.Model);
            return [...new Set(titlesOnly)];
        }
        function buildOptions(uniqueList) {
            return uniqueList.map(curr => {
                return { label: curr, value: curr };
            });
        }
    }
}

export function dropdown2_change(event) {
    uniqueDropDown3();
    $w("#dropdown3").enable();
    function uniqueDropDown3() {
        // Changed this
        findAll(
            wixData.query("Products")
                .contains("Model", $w("#dropdown2").value)
                .ascending("Part")
        ).then(results => {
                const uniqueTitles = getUniqueTitles(results);
                $w("#dropdown3").options = buildOptions(uniqueTitles);
            });
    }

    function getUniqueTitles(items) {
        const titlesOnly = items.map(item => item.Part);
        return [...new Set(titlesOnly)];
    }
    function buildOptions(uniqueList) {
        return uniqueList.map(curr => {
            return { label: curr, value: curr };
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM