使用 promise 时函数没有 return 值,JavaScript
Function does not return value when use promise, JavaScript
本人对JavaScript了解甚少,不好意思提出这个问题
我有一个方法:
function userAgent() {
var result = "";
navigator.userAgentData
.getHighEntropyValues(["platformVersion"])
.then((ua) => {
if (navigator.userAgentData.platform === "Windows") {
const majorPlatformVersion = parseInt(ua.platformVersion.split(".")[0]);
if (majorPlatformVersion >= 13) {
console.log("Windows 11 or later");
result = "Windows 11 or later";
} else if (majorPlatformVersion > 0) {
console.log("Windows 10");
result = "Windows 10";
} else {
console.log("Before Windows 10");
result = "Before Windows 10";
}
} else {
console.log("Not running on Windows");
result = "Not running on Windows";
}
});
return result;
}
它 return 是空字符串,但会打印以控制正确的值。
请告诉我我的错误是什么以及如何return这里的值,我想在之后使用它。
谢谢!
你需要做两件事。首先 return 承诺:
return navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then(...).
然后,return
来自 .then()
处理程序的所需值。上面的第一个 return 将 return 来自您的函数的承诺。 .then()
处理程序中的 return
将使该值成为您正在 returning 的承诺的已解决值。
function userAgent() {
return navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then(ua => {
if (navigator.userAgentData.platform === "Windows") {
const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]);
if (majorPlatformVersion >= 13) {
console.log("Windows 11 or later");
return "Windows 11 or later";
} else if (majorPlatformVersion > 0) {
console.log("Windows 10");
return "Windows 10";
} else {
console.log("Before Windows 10");
return "Before Windows 10";
}
} else {
console.log("Not running on Windows");
return "Not running on Windows";
}
});
}
然后,你可以这样称呼它:
userAgent().then(result => {
// use the result here
console.log(result);
});
本人对JavaScript了解甚少,不好意思提出这个问题
我有一个方法:
function userAgent() {
var result = "";
navigator.userAgentData
.getHighEntropyValues(["platformVersion"])
.then((ua) => {
if (navigator.userAgentData.platform === "Windows") {
const majorPlatformVersion = parseInt(ua.platformVersion.split(".")[0]);
if (majorPlatformVersion >= 13) {
console.log("Windows 11 or later");
result = "Windows 11 or later";
} else if (majorPlatformVersion > 0) {
console.log("Windows 10");
result = "Windows 10";
} else {
console.log("Before Windows 10");
result = "Before Windows 10";
}
} else {
console.log("Not running on Windows");
result = "Not running on Windows";
}
});
return result;
}
它 return 是空字符串,但会打印以控制正确的值。
请告诉我我的错误是什么以及如何return这里的值,我想在之后使用它。
谢谢!
你需要做两件事。首先 return 承诺:
return navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then(...).
然后,return
来自 .then()
处理程序的所需值。上面的第一个 return 将 return 来自您的函数的承诺。 .then()
处理程序中的 return
将使该值成为您正在 returning 的承诺的已解决值。
function userAgent() {
return navigator.userAgentData.getHighEntropyValues(["platformVersion"]).then(ua => {
if (navigator.userAgentData.platform === "Windows") {
const majorPlatformVersion = parseInt(ua.platformVersion.split('.')[0]);
if (majorPlatformVersion >= 13) {
console.log("Windows 11 or later");
return "Windows 11 or later";
} else if (majorPlatformVersion > 0) {
console.log("Windows 10");
return "Windows 10";
} else {
console.log("Before Windows 10");
return "Before Windows 10";
}
} else {
console.log("Not running on Windows");
return "Not running on Windows";
}
});
}
然后,你可以这样称呼它:
userAgent().then(result => {
// use the result here
console.log(result);
});