使用 Promise 的 JavaScript axios

问题描述 投票:0回答:1

这个方法有效又快速,还是有其他方法?

  const getStores = async () => {
        return new Promise((resolve) => {
            resolve({ pending: true, response: null, error: null });
          })
          .then(async () => {
            return new Promise(async (resolve) => {
              setTimeout(async () => {
                try {
                  const response = await $axios.get(`/Store`);
              
                  resolve({ pending: false, response: response.data, error: null, refresh: getStores });
                } catch (error) {
                  resolve({ pending: false, response: null, error: error.message, refresh: getStores });
                }
              }, 1000);
            });
          })
    }

我想返回待处理的数据和错误以及刷新数据的方法。

javascript axios promise
1个回答
0
投票

不要这样做。您不应该 永远不要将

async function
作为执行器传递给
new Promise
,并且 不要将
await
.then(…)
语法混合使用。此外,
pending
 属性和您创建的第一个承诺完全没有意义,它们永远不会返回给调用者。

你可以将整个事情简化为

async function getStores() { await new Promise((resolve) => { setTimeout(resolve, 1000); }); try { const response = await $axios.get(`/Store`); return { pending: false, response: response.data, error: null, refresh: getStores }; } catch (error) { return { pending: false, response: null, error: error.message, refresh: getStores }; } }
但是您可能不需要任何超时,并且错误处理(使用

try

/
catch
.catch(…)
,或让它传播)最好留给调用者,而不是强迫他们在
null
 属性的非
error
ishness。

© www.soinside.com 2019 - 2024. All rights reserved.