如何在React Typescript中的promise中使用array.includes



我真正遇到的问题是.includes()方法的行为不稳定。我用它来检查用户输入的单词是否是有效的单词,比如allWords.includes(userWord)。它通常返回false,而不管是否包含单词。allWords大约有12000个元素,我想我需要异步调用它。

codesandbox中的一个更简单的版本可以工作,但它总是在我的react程序中返回false。我还是TS和异步编程的新手。计划读一本关于它的书,但想先完成这个该死的程序。

这是我的异步函数

//helpers.ts
export async function validateGuess(guess: GuessCharacter[]): Promise<boolean> {
async function includesPromise(array: string[], word: string) {
return new Promise<boolean>((resolve) => {
resolve(array.includes(word));
});
}

//each letter of word is in an object
let word: string = '';
for (let character of guess) {
word += character.value;
}
return includesPromise(allWords, word).then((result) => result);
}

这就是它被称为的地方

/// index.ts
function handleEnterPress() {
validateGuess(gameState.guesses[gameState.guessCount]).then((response) => {
if (response) {
dispatch(ActionKind.Enter);
} else {
console.log('Not in word list');
}
});

我也试过

async function handleEnterPress() {
let status: boolean = await validateGuess(
gameState.guesses[gameState.guessCount]
);
if (status) {
dispatch(keyAction.Enter);
} else {
console.log('Not in word list');
}
}

感谢所有的帮助。谢谢

您的逻辑看起来不错。

有几件事:

  1. gameState.guesses包含什么?要使逻辑工作,它应该是objectsarray,具有名为value的属性,该属性应该是可迭代的
  2. 如果gameState.guess[i]是字符串,则不应执行word += character.value,而应执行:
    word += character
  3. gameState.guessCount不应大于(gameState.guesses.length - 1),否则会得到一个未定义的值
  4. 一旦异步操作成为内存中的操作,您就不需要在那里使用它,这样做不会更快,也不会为其他任务腾出处理时间

主要问题是您认为此行返回result。事实并非如此。它返回未解决的承诺。当承诺得到解决时(因为您添加了.then(),所以结果被传递……但随后它就丢失了。

return includesPromise(allWords, word).then((result) => result);

你可以等待它来获得承诺的价值。最好不要混合async/await和.then((/.catch((.

编辑:。。。其他人的评论也是有效的。

最新更新