繁体   English   中英

等待诺言返回未定义?

[英]await promise return undefined?

这是代码:

export const wxreq = (config) => {
config.url = `${HTTP_HOST}${config.url}`;
return new Promise((resolve, reject) => {
    return wepy.request(Object.assign(config, {
        async success (res) {
            // res is a promise, this promise is return  {data: 123}
            const responseFromMiddle = await res;
            return resolve(responseFromMiddle.data);
        },
        fail () {
            reject(new Error(`Request ${config.url} fail!`));
        },
        complete () {
            resolve();
        }
    }))
  })
};

在vuejs生命周期中

async onReady () {
  cosnt res = wxreq(someCorrectConfig);
  console.log(res); // undefined; need to be 123 
}

我很好奇为什么没有定义res?请帮助〜如此困惑!thx〜

实施似乎有问题。 要调用wxreq,您需要在此之前使用await。 还将条件包装在try块中以捕获蚂蚁异常。

async onReady () {
  try {
      const res = await wxreq(someCorrectConfig);
      console.log(res); // undefined; need to be 123 
    }
    catch(err){
    console.log(err)
    }
}

试试这个:在async函数中的异步操作之前使用await

async onReady () {
  const res = await wxreq(someCorrectConfig);
  console.log(res); // undefined; need to be 123 
}

并消除承诺return

export const wxreq = (config) => {
config.url = `${HTTP_HOST}${config.url}`;
return new Promise((resolve, reject) => {
     wepy.request(Object.assign(config, {
        async success (res) {
            // res is a promise, this promise is return  {data: 123}
            const responseFromMiddle = await res;
            return resolve(responseFromMiddle.data);
        },
        fail () {
            reject(new Error(`Request ${config.url} fail!`));
        },
        complete () {
            resolve();
        }
    }))
  })
};

我想你应该做

export async function wxreq(config) {
    const res = await new Promise((resolve, reject) => {
        wepy.request(Object.assign(config, {
            url: `${HTTP_HOST}${config.url}`,
            success: resolve,
            fail: reject
        });
    });
    return res.data;
}

但是在不知道什么是wepy情况下很难说。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM