当前位置: 首页 > 知识库问答 >
问题:

javascript - 请问一个Promise 的问题?

栾越
2024-04-09
  home_barlist1: function home_barlist1() {    //获取中间导航     var that = this;    _wxRequest2.default.post({      'url': _api2.default.home_barlist,      'data': {        show_type: 4      }    }).then(function (res) {      if (res.code == 100) {        var homelist = res.data;        that.setData({          homelist1: homelist        });      } else {        _tip2.default.toast(res.data);      }    });  },

请问上面这段代码,我想封装成Promise 这种 直接调用this.home_barlist1().then 该怎么改呢?

我改成下面这样 好像不行

 home_barlist1: function home_barlist1() {    //获取中间导航   return new Promise(function (resolve, reject) {    var that = this;    _wxRequest2.default.post({      'url': _api2.default.home_barlist,      'data': {        show_type: 4      }    }).then(function (res) {      if (res.code == 100) {        var homelist = res.data;        that.setData({          homelist1: homelist        });        resolve(res);      } else {        _tip2.default.toast(res.data);      }    });   }); },

共有2个答案

陶寒
2024-04-09

image.png

你这不本来就是一个 Promise 么?直接把箭头处 return 出去就不完了?

澹台臻
2024-04-09

你的封装基本上是正确的,但是需要注意的是,当你返回一个新的Promise时,你需要确保在所有可能的执行路径上都调用resolvereject。在你的代码中,如果res.code不等于100,你没有调用resolvereject,这可能会导致Promise永远不会被解决或拒绝。

你可以通过在else语句块中调用reject来解决这个问题。这样,如果请求失败(即res.code不等于100),Promise将被拒绝,并且你可以在调用this.home_barlist1()时使用.catch()来处理这个错误。

以下是修改后的代码:

home_barlist1: function home_barlist1() {  // 获取中间导航   return new Promise(function (resolve, reject) {    var that = this;    _wxRequest2.default.post({      'url': _api2.default.home_barlist,      'data': {        show_type: 4      }    }).then(function (res) {      if (res.code == 100) {        var homelist = res.data;        that.setData({          homelist1: homelist        });        resolve(res);      } else {        _tip2.default.toast(res.data);        reject(new Error(res.data));  // 在这里调用reject      }    });  });}

现在,你可以像这样调用home_barlist1函数并处理返回的Promise:

this.home_barlist1().then(function(res) {  // 处理成功的情况}).catch(function(error) {  // 处理失败的情况});
 类似资料:
  • 第一个问题,这个为什么先输出3后输出2呢 第二个问题,这个为什么会交错输出呢,142536 promise小白一枚,上述两个疑问,希望能得到详细的解答

  • 请问这种 space-between 两端对齐的,最后一行 怎样靠左和上面的一样正常显示,而不是最后一个跑到最右边去了, 网上找了很多,加伪类之类的方法都不行,请问如何去做合适?

  • 我有一个vue写的标签 其中,queryByPrimaryKey返回的是一个promise,所以这里用await等待promise的值,因为用到了await,所以外层又需要用async包裹,这样整体函数返回的又是一个promise,那么src属性实际上要的是返回的string值,而不是包裹着string的promise,我如何拿到string值?

  • 请教一个算法问题 输入原数组(按start排序, 并且下一项的start一定>=前一项的end) 提取出连续的相同项合并成一个新的对象, 插入原数组, 根据start和end判断是否连续 如例子里的(0,1,2)项里的B 提取并合并得到{ "start": 1, "end": 4, "content": ["B"] } (2,3)项里的D 提取并合并得到{ "start": 3, "end": 5

  • 请大佬帮忙分析一下,以下代码执行顺序(正确的顺序是:a 1 2 3 b 4 c 5):

  • 问题背景:我现在想做一个关于文本溢出,显示展开按钮,文本如果没溢出,就不显示展开按钮 例子:如果文本超出两行,显示按钮,小于等于两行,那么就不显示按钮。 但是不知道如何判断文本是否会超出两行?