为什么这等待返回未定义?

时间:2019-12-18 00:33:30

标签: javascript es6-promise

我有以下代码:

const checkBatchStatus = async (batchId: number) => {
let result = await fetchcall("POST", "api/batch/status", { "BatchId": batchId })
    .then(result => {     
        Promise.resolve(true);
    })
    .catch(err => {
        Promise.resolve(false);
    });
};

呼叫者代码如下:

async function isBatchRequestCompleted(batchId: number) {

    let status = await checkBatchStatus(batchId);
    console.log(`status is ${status}`);

状态始终未定义。不明白为什么。

如果我将checkBatchStatus更改为简单地返回false,那么我得到的状态等于false。

const checkBatchStatus = async (batchId: number) => {
    return false;
};

一个善良的灵魂可以向我解释我所看到的吗?

2 个答案:

答案 0 :(得分:2)

您没有在函数checkBatchStatus()中返回值。如果仅需要布尔值,则在Promise.resolve()的回调函数中调用.then()是错误的主意。

const checkBatchStatus = (batchId: number) => {
  return fetchcall("POST", "api/batch/status", { "BatchId": batchId })
    .then(result => {     
        return true;
    })
    .catch(err => {
        return  false;
    });
};

答案 1 :(得分:2)

您在这里不必要地混合了promise和async / await。我建议坚持一个或另一个。

async / await

const checkBatchStatus = async (batchId: number) => {
  try {
    await fetchcall("POST", "api/batch/status", { "BatchId": batchId });
    return true;
  } catch {
    return false;
  }
};

或承诺:

const checkBatchStatus = (batchId: number) => {
  return fetchcall("POST", "api/batch/status", { "BatchId": batchId })
    .then(result => true)
    .catch(err => false);
};