首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要用vuex的嵌套承诺呢?

为什么要用vuex的嵌套承诺呢?
EN

Stack Overflow用户
提问于 2022-04-06 01:56:38
回答 1查看 76关注 0票数 1

我正在维护我以前的程序员的vue代码。

我在他的vuex模块中找到了这段代码。

代码语言:javascript
复制
import axios from "axios";
import qs from "qs";
import httpi from "../httpInstance";  // this is just a wrapper for axios

const getPromise = (context, url) => {
  return new Promise((resolve, reject) => {
    httpi.get(url).then(
      (response) => {
        resolve(response);
      },
      (error) => {
        reject(error);
      }
    );
  });
};

// same repeated for 'put', 'post' etc...

我想知道他为什么这样嵌套承诺。

ACTIONS中,他使用这个包装器调用后端API,如下所示。

代码语言:javascript
复制
const actions = {
  [ACT_GET_ALL_RULESOURCE]: function (context) {
    return getPromise(context, `${APIURLPREFIX}/polapi/api/rulesource`);
  },

他通过这件事想达到什么目的?

我很困惑,因为axios(httpi)本身已经是一个承诺。这里有什么意义?

**编辑

在Vue Component methods中,他使用如下操作。

代码语言:javascript
复制
getAllRulesource() {
  this.$store.dispatch(`rules/${ACT_GET_ALL_RULESOURCE}`)
    .then((res) => {
      this.rulesourceList = res.data;
    })
    .catch((err) => {
      this.msg = "Cannot GET rulesource";
    })
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-06 02:22:50

之前的开发人员没有很好地理解承诺。由于httpi似乎返回了一个承诺( OP代码调用了它的then ),所以getPromise函数可以并且应该重写为.

代码语言:javascript
复制
const getPromise = (context, url) => {
  return httpi.get(url);
};

或者完全被移除。可能打电话的人可以说.

代码语言:javascript
复制
httpi.get('http...').then(response => {
  console.log(response);
}).catch(error => {
  console.log(error);
})

在声明为async的函数中,更现代的调用方语法是.

代码语言:javascript
复制
try {
  const response = await httpi.get('http...');
  console.log(response);
} catch(error) {
  console.log(error);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71760230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档