javascript - 从匿名函数返回将不起作用,即使它不是异步的

标签 javascript asynchronous return anonymous-function

我有以下功能:

function filterDesiredURLs(tweet) {
    tweet.entities.urls.forEach((url) => {
        desiredURLs.forEach((regexPattern) => {
            if (regexPattern.test(url['expanded_url'])) {
                console.log('hello, im returning');
                return true;
            }
        })
    })
}

我这样调用它:

console.log(filterDesiredURLs(tweet));

其中 tweet 是一个已定义的对象。我可以看到该函数确实正在返回,因为我在控制台中看到输出 hello, im returned,但是 console.log(filterDesiredURLs(tweet)); 打印 未定义。我希望这适用于作为异步操作的回调传递的匿名函数,但这不是异步的,因此返回应该有效。发生什么事了?

最佳答案

return 不能跨函数边界进行操作。它仅从最里面函数返回。做你想做的事,你可能想做 filterfind加上some :

function filterDesiredURLs(tweet) {
  // First, you were missing a return in the outer function
  // Without a return here, *this* function will return `undefined`
  return tweet.entities.urls.filter(url => {
    // We are using `filter` to reduce the URL list to only
    // URLs that pass our test - this inner function needs to return
    // a boolean (true to include the URL, false to exclude it)
    return desiredURLs.some(regexPattern => {
      // Finally, we use `some` to see if any of the regex patterns match
      // This method returns a boolean value. If the function passed to it ever 
      // returns true, it terminates the loop and returns true
      // Otherwise, it iterates over the entire array and returns false.
      return regexPattern.test(url['expanded_url']);
    });
  });
}

关于javascript - 从匿名函数返回将不起作用,即使它不是异步的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41756009/

相关文章:

javascript - 如果是则返回确认调用函数

java - 我可以将 return 语句放在 switch 语句中吗?

C++11 - 返回表达式以确定类型

java - return语句后执行的代码

javascript - 如何从我的网页上将负数更改为 0

javascript - 在这种情况下如何扩展asp.net应用程序

javascript - 完全之谜 : simple RegExp code only working on certain pages

node.js - 在 forEach 中完成每个异步任务后执行回调

ios - 异步函数和 Firebase 与 Swift 3

c# - 对套接字的异步方法 BeginSend 的队列调用