我正在尝试访问[[Promise Results]]并将其保存为变量。最终目标,我只需要.then语句的结果并将其用于其他功能。如果还有另一种更好的方法,请告诉我,我是JavaScript的新手,所以如果您能向我解释它而不只是转储代码,那就太好了。谢谢提前 这是提取请求
function currentloginid() {
return fetch('http://localhost/gaq/api/api.php?action=userid', {
method: 'GET',
})
.then(function(response) {
return response.json();
})
.then(function(data) {
var userid = JSON.parse(data);
console.log(userid);
return userid;
})
}
下面的代码是当我在另一个函数中登录该函数时的代码
Promise {<pending>}
__proto__: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: 1
答案 0 :(得分:0)
您可以使用async/await
并直接返回数据(用户ID)来代替承诺链。
const currentloginid = async () => {
const response = await fetch('http://localhost/gaq/api/api.php?action=userid')
const data = await response.json()
//console.log(JSON.parse(data))
return JSON.parse(data)
}
答案 1 :(得分:0)
有3种解决方法:
.then
来获取返回的值。
function currentloginid() {
return fetch('http://localhost/gaq/api/api.php?action=userid', {
method: 'GET',
})
.then(function(response) {
return response.json();
})
.then(function(data) {
var userid = JSON.parse(data);
console.log(userid);
return userid;
})
}
currentloginid().then(value => console.log(value));
.then
之一中,将一个外部变量设置为该值。但是,此解决方案不是很好,因为您可能会遇到未设置myValue
的情况。
let myValue;
function currentloginid() {
return fetch('http://localhost/gaq/api/api.php?action=userid', {
method: 'GET',
})
.then(function(response) {
return response.json();
})
.then(function(data) {
var userid = JSON.parse(data);
console.log(userid);
myValue = userid
return userid;
})
}
currentloginid();
console.log(myValue);
async await
“等待”返回值。我认为这种方法更具可读性和易用性(在后台与选项1相同)。function currentloginid() {
return fetch('http://localhost/gaq/api/api.php?action=userid', {
method: 'GET',
})
.then(function(response) {
return response.json();
})
.then(function(data) {
var userid = JSON.parse(data);
console.log(userid);
return userid;
})
}
console.log(await currentloginid());
答案 2 :(得分:0)
您可以根据需要在相同的诺言上多次调用then()。
将函数返回的promise存储在变量中,使您可以在需要时在该变量上使用then()
function currentloginid() {
return fetch('https://jsonplaceholder.typicode.com/users/1')
.then(response => response.json())
}
const storedPromise = currentloginid();
console.log('No delay')
storedPromise.then(({name, id})=> console.log({name, id}))
setTimeout(()=>{
console.log('After delay, same promise')
storedPromise.then(({name, id})=> console.log({name, id}))
}, 2000)