所以我试图从api中获取数据,其中有可能与参数组合。这是我到目前为止完成的,但仍然停留在
上// Given a string
const drinks = 'apple juice, orange juice, strawberry juice, water';
// Create an array of each drink
const drinkList = drinks.match(/[^,s][^,]*[^,s]*/g);
let urlParamList;
drinkList.forEach(drink => {
const splitDrinkStrings = drink.split(' ');
let name, fruit, urlParam;
if (splitDrinkStrings.length > 1) {
name = splitDrinkStrings[1]?.toLowerCase();
fruit = splitDrinkStrings[0]?.toLowerCase();
urlParam = `${name}/${fruit}`;
urlParamList.push(urlParam);
} else {
name = splitDrinkStrings[0]?.toLowerCase();
urlParam = name;
urlParamList.push(urlParam);
}
});
// urlParamList = ["juice/apple", "juice/orange", "juice/strawberry", "water"]
// so the fething would look like fetch(`https://myApi.com/api/${param}`) but need to try with each param from my urlParamList until there's a success. If there's no success just throw an error.
提前感谢!
这里有几个问题,所以。
第一个问题:
使用任意数量的单词而不仅仅是像下面这样的两个单词的最佳方法?
您可以简单地对数组进行join
,因此:
splitDrinkStrings.reverse().join('/') // juice/apple or water or more/than/two/words
第二个问题
在此之后,使用每个参数从drinkList尝试从api (
https://myApi.com/api/${urlParam}
)中获取,并在第一次成功时停止并抛出错误,如果没有什么?
您可以通过多种方式做到这一点,其中一种方法是在Array
上使用some
函数,如果它返回false,则抛出错误。完整代码:
const drinks = 'apple juice, orange juice, strawberry juice, water';
const found = drinks.split(', ').some(async drink => {
const splitDrinkStrings = drink.split(' ');
const urlParam = splitDrinkStrings.reverse().join('/');
try {
await fetch(`https://myApi.com/api/${urlParam}`);
return true;
} catch {
return false;
}
})
if(!found) throw new Error('boom');