javascript - 这个“if”JavaScript 语句有什么问题?
问题描述
我最初并没有写这个,所以我为我的知识差距道歉。
我添加了以下代码块以确定用户是否已导航到数组中包含的域之一。该数组被定义为“域”。只有当从 Url 解析的用户当前域匹配时,才应该执行函数的其余部分。(我的加星标)。
问题是,无论用户登陆哪个 Url,即使有这个“if”条件,该函数仍在执行。我知道这一点,因为无论我导航到哪个站点,推荐 api 都会触发。我不确定这是放置问题还是我的语法不正确(或两者兼而有之);但我非常感谢对此的任何见解!
export const getRecommendations = url =>
**browser.storage.local.get("domains").then(({ domains }) => {
const domain = parseDomain(url);
if (!domains.includes(domain)) {
return
}
});**
browser.storage.local.get("user").then(({ user }) =>
fetch(trestle.api.recommendations, {
method: "POST",
body: JSON.stringify({ currentUrl: url, emailAddress: user.username }),
headers: {
Authorization: `Bearer ${user.token}`,
Accept: "application/json",
"Content-Type": "application/json"
}
})
.then(response => response.json())
.then(recommendation => recommendation)
.catch(e => new Error("Unable to return recommendations for company"))
);
解决方案
browser.storage.local.get
返回一个异步执行的承诺。包含您的 return 语句的函数在代码块的其余部分之后执行,并且不会对该块的其余部分的执行产生任何影响。您需要将块的其余部分放在一个函数中并将代码更改为
browser.storage.local.get("domains").then(({ domains }) => {
const domain = parseDomain(url);
if (domains.includes(domain)) {
callUrlFunction();
}
});
推荐阅读
- dataframe - 如何在 DataFrames 的每一行中添加列值?
- android - 如何在 jetpack compose Preview 中显示 Kotlin 协程流数据?
- node.js - Nginx 代理管理器以任何方式设置到 docker 容器的 https 连接?
- r - 如何在R中的变量之间生成具有圆和w依赖关系的多元数据
- javascript - Firefox 中的日期对象出错,但在 Chrome 中工作
- python - Python textwrap忽略字符串某些部分的长度
- ruby-on-rails - 在另一个控制器内创建对象时验证错误不起作用
- python - 创建从现有列 pandas 派生的新列
- javascript - 使用 javascript 在 webkit 蒙版位置动画之间等待 5 秒
- node.js - 如何使用 ReactJs 用表中的数据库值替换默认值