是的,我尝试了其他找到的解决方案,但无济于事。我试过在promise之上设置一个变量(区域),但意识到它超出了范围,所以这是我的下一个解决方案。每当我尝试返回区域时,它都会以未定义的形式返回。每当我console.log它(在同一位置)时,它都可以正常工作。有什么见解吗?
编辑:iplocation是一个npm软件包iplocation
function getRegion(ipAddr) {
iplocation(ipAddr)
.then(res => {
if (res.country == 'US') {
region = res.country + "-" + states[res.region_code];
} else {
region = res.country;
}
return region;
})
}
答案 0 :(得分:0)
承诺异步运行。这意味着在运行.then
部分时,外部函数已返回未定义状态。您可以使外部函数async
,然后使await
成为Promise的值。
答案 1 :(得分:0)
async function getRegion (ipAddr) {
let res
try {
res = await iplocation(ipAddr)
if (res.country === 'US') {
return `${res.country} - ${states[res.region_code]}`
} else {
return res.country
}
} catch (err) {
throw err
}
}
用法:
getRegion('8.8.8.8')
.then(loc => console.log(loc))
.catch(err => console.log(err))
答案 2 :(得分:0)
您的操作是异步的,因此您需要返回一个Promise,并且调用方需要对其使用.then()
:
function getRegion(ipAddr) {
// return the promise
return iplocation(ipAddr).then(res => {
// return value will be resolved value of the promise
if (res.country == 'US') {
return res.country + "-" + states[res.region_code];
} else {
return res.country;
}
});
}
getRegion(...).then(region => {
// use the region in here
console.log(region);
}).catch(err => {
// handle error here
console.log(err):
});
答案 3 :(得分:-1)
您需要返回您正在等待的承诺。您可以使用return new Promise(...)
或使用async/await
,如下所示。
async function getRegion(ipAddr) {
const res = await iplocation(ipAddr)
if (res.country == 'US') {
return res.country + "-" + states[res.region_code];
}
return res.country;
}