码迷,mamicode.com
首页 > 其他好文 > 详细

return Promise.resolve

时间:2020-07-29 00:45:12      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:使用   简单   ima   cat   hello   eth   span   多个   mic   

前言

  异步操作对于前端开发而言必不可少,尤其和后端进行交互的时候,项目有时需要多个异步操作串联来进行运算,而我们通常会选择把其封装起来作为公用的方法,此时便要return返回值。

 

问题

function getProm() {
  return Promise.resolve(ajax_method()).then(res=>{
    return res;
  });
}//Promise { <pending> }

  这个时候获取到的是Promise的方法体,其内部的[[PromiseValue]]是不对外开放的,就是我们无法从方法体外部获取这个值,这里就算换成async也一样。

技术图片

 

 

 

 

 解决

  无法从外部获取就从内部解决,在到最后的方法之前,我们依然返回整个Promise的方法体,到了最后需要展示或使用到请求体的内的数据时,再利用.then获取。

function ajax_method() {
  let str = ‘ World ‘;
  return getProm2().then(data=>{
    str = data + str;
    return str;
  })
}

function ajax_method2(url,data,method,success) {
  return ‘ Hello ‘;
}

function getProm() {
  return Promise.resolve(ajax_method()).then(res=>{
    return res;
  });
}//Promise { <pending> }

function getProm2() {
  return Promise.resolve(ajax_method2()).then(res=>{
    // console.log(res);
    return res;
  });
}

function getFunc(){
  let str = ‘‘;
  return getProm().then(data=>{
    return str + data;
  })
  return str;
}

console.log(getFunc());//Promise { <pending> }
getFunc().then(data=>console.log(data));//Hello  World

 

总结

  今天讲的思路比较简单,相信大部分人都知道,只是刚巧有人问起我就讲解了一下,此外大家要注意,异步体内可以进行try catch判断以及.then().then().finally()等链式操作。

async fetchData(url) => {
  try {
    const response = await axios.get(`/q?query=${query}`)
    const data = response.data
    this.props.processfetchedData(data)
  } catch (error) {
    console.log(error)
  }
}
Promise.resolve(ajax_method())
  .then(console.log(‘成功‘))
  .catch(error => console.error(error))
  .finally(() => console.log(‘结束‘))

 

return Promise.resolve

标签:使用   简单   ima   cat   hello   eth   span   多个   mic   

原文地址:https://www.cnblogs.com/zxd66666/p/13394479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!