问题描述
我目前正在编写一个使用转发器设置的搜索结果页面,以便转发器容器能够将用户重定向到动态页面。
转发器和动态页面上使用的数据集通过相关集合中的“编号”字段链接。因此,如果转发器在数字字段中显示“1”的详细信息,则用户可以单击容器框并重定向到“1”的动态页面。我设法让这个工作正常,因为当我点击相关容器时,我被重定向到正确的动态页面。但是,转发器数据集中存在的某些数字在动态页面的数据集中不存在。所以我可以在中继器的数据集中有 1-50 个数字,但动态页面的数据集中只有 20 个数字,目前如果容器包含动态页面中不存在的数字,它仍然会尝试重定向但只会导致 404 错误页面,我更喜欢在这种情况下,容器根本无法点击。
到目前为止,我已经尝试了以下代码:
$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 选项是否可以解决我的问题。
谢谢
解决方法
我的猜测是,这与您代码中的承诺有关。在您检查 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...