0

我目前正在编写一个使用转发器设置的搜索结果页面,以便转发器容器能够将用户重定向到动态页面。

转发器和动态页面上使用的数据集由相关集合中的“数字”字段链接。因此,如果中继器在数字字段中显示“1”的详细信息,则用户可以单击容器框并重定向到“1”的动态页面。当我单击相关容器时,我已成功地使其正常工作,因为我被重定向到正确的动态页面。但是,转发器数据集中存在的某些数字在动态页面的数据集中不存在。所以我可以在转发器的数据集中有数字 1-50,但动态页面的数据集中只有 20 个存在,并且目前如果容器包含动态页面中不存在的数字,

到目前为止,我已经尝试了以下代码:

$w('#Dataset1').onReady(() => {
  wixData.query('Collection1')
    .eq('number', number1)
    .find()
    .then(res => {
      const number1 = res.number1;
    })
    .catch ((err) => {
      let errorMsg = err;
    });
    wixData.query('Collection2')
    .eq('number', number2)
    .find()
    .then(res => {
      const number2 = res.number2;
    })
    .catch ( (err) => {
      let errorMsg = err;
    });

    if (number1 === number2){
$w("#container2").onClick( (event) => {
    
    

 let $item =  $w.at(event.context);
 let currentItem = $item('#Dataset1').getCurrentItem();
 let dynamicPageID = `${currentItem.number}`
 let collectionID = `${currentItem.title}`
 
   console.log('https://www.mywebsite.com/'+collectionID+'/'+dynamicPageID);
 wixLocation.to('https://www.mywebsite.comk/'+collectionID+'/'+dynamicPageID);
 });
    }
});
}

但这仍然会重定向到该数字不存在的动态页面并发送到 404 错误!

有人可以请我指出正确的方向吗?

谢谢


在 Sam 提出关于 async/await 的建议之后,我一直在玩弄代码,但仍然没有找到可行的解决方案。我尝试了以下方法:

async function linktodynamicpage () {
$w('#Dataset1').onReady(() => {
  wixData.query('Collection1')
    .eq('number', number1)
    .find()
    .then(async(res) => {
      const number1 = await res.number1;
    })
    .catch ((err) => {
      let errorMsg = err;
    });
    wixData.query('Collection2')
    .eq('number', number2)
    .find()
    .then(async(res) => {
      const number2 = await res.number2;
    })
    .catch ( (err) => {
      let errorMsg = err;
    });

    if (number1 === number2){
$w("#container2").onClick( (event) => {
    
    

 let $item =  $w.at(event.context);
 let currentItem = $item('#Dataset1').getCurrentItem();
 let dynamicPageID = `${currentItem.number}`
 let collectionID = `${currentItem.title}`
 
   console.log('https://www.mywebsite.com/'+collectionID+'/'+dynamicPageID);
 wixLocation.to('https://www.mywebsite.comk/'+collectionID+'/'+dynamicPageID);
 });
    }
});
}

我已经尝试了一些变体,试图移动异步但不幸的是无济于事。

只是想我会看看我是否得到了正确的异步代码或者是否有错误。这样,至少我知道 async/await 选项是否是我的问题的可行解决方案。

谢谢

4

1 回答 1

0

我的猜测是,这与代码中的 Promises 有关。在您检查是否number1等于时,number2您的查询尚未解决,因此它们都是undefined并且总是彼此相等。

要解决这个问题,您可以切换到使用async/await语法,或者使用Promise.all()等待两个查询都解决后再进行比较。


编辑仍然不会等待查询解决。你需要更多这样的东西:

async function linktodynamicpage () {
  $w('#Dataset1').onReady(async () => {
    const number1 = await wixData.query('Collection1')
      .eq('number', number1)
      .find();
    
    const number2 = await wixData.query('Collection2')
      .eq('number', number2)
      .find();

    if (number1 === number2){
    
    // the rest of the code...
于 2021-04-04T06:25:28.997 回答