回报承诺回应

时间:2018-03-10 22:52:45

标签: javascript asynchronous promise

我正在尝试将Promise的实际响应存储到变量

exp()

运行此命令时,token将返回Promise对象而不是实际响应。如何将实际响应或响应中的值存储为父函数中的变量?

4 个答案:

答案 0 :(得分:0)

我首先创建一个名为get token的方法。

根据4castle的建议更新/简化

getToken() {
    return fetch(tokenUrl, options)
            .then(res => res.json())
            .then(data => data.access_token)
}

然后在方法中你想使用令牌

someMethod() {
    getToken().then(token => {
        // Use it.
    })
}

答案 1 :(得分:0)

因为函数then返回一个承诺。

另一种方法是使用async函数。



function getToken() {
  let tokenPromise = new Promise(function(resolve, reject) {
    setTimeout(function() {
      resolve('myNewToken');
    }, 100);
  });

  return tokenPromise;
}

async function main() {
  let token = await getToken();
  console.log(token);
}

main();




答案 2 :(得分:0)

为什么围绕Promise创建新的fetch

function status(res) {
  if (res.ok) {
    return Promise.resolve(res)
  } else {
    return Promise.reject(new Error(res.statusText))
  }
}

function json(res) {
  return res.json()
}

function getToken() {
  return fetch(tokenUrl, options) // Fetch URL
    .then(status) // Is everything nice?
    .then(json) // Response to json
    .then(jsonData => jsonData.access_token) // return access_token
    .catch(function(error) { // Some S*ht Happens :(
      console.log('Request failed', error);
      /* ErrorHandling Stuff */
    });
}

答案 3 :(得分:0)

您可以使用ES7 async / await

let token;
let tokenPromise = async () => {
  try {
    const res = await fetch(tokenUrl, options);
    const data = await res.json();
    return data.access_token
  } catch (error) {
    console.error('Error fetching token', error);
    return 'Not clean';
  }
}
token = tokenPromise().then(res => res);
return token;