有没有一种方法可以将[[Promise Result]]保存为变量?

时间:2020-10-02 01:01:22

标签: javascript ecmascript-6 promise

我正在尝试访问[[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

3 个答案:

答案 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种解决方法:

  1. 由于您返回了承诺,请使用.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));

  1. 在您已经拥有的.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);

  1. 使用语法糖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)