0

当我使用我的 express nodejs 应用程序发送错误消息时res.status(400).send(err.stack);,我似乎无法摆脱我在接收端设置的解码器流。

这是我在浏览器中的代码(仅限于fetch部分):

fetch("/the/url", {
    method: "POST",
    body: formData,
}).then(response => {
    if (response.status === 200) {
        return response.blob().then((data) => {
            return data;
        });
    } else {
        return new Promise((resolve, reject) => {
            let err_message = "";
            let reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
            reader.read().then(({done, value}) => {
                // When no more data needs to be consumed, close the stream
                if (done) {
                    reject(err_message);
                    return;
                }
                // Enqueue the next data chunk into our target stream
                err_message += value;
            });
        }).then((res) => {
            return (res)
        }).catch((err) => {
            return (err)
        });
    }
}).then((res) => {
    console.log(res)
}).catch((err) => {
    console.log(err)
});

我在所有后续都设置了断点thencatch但它永远不会解决/拒绝。

感谢任何指针。

4

1 回答 1

0

如果它对某人有帮助,您需要对同一函数进行递归调用才能正确中断。根据以下内容:

fetch("/the/url", {
    method: "POST",
    body: formData,
}).then(response => {
    if (response.status === 200) {
        return response.blob().then((data) => {
            return data;
        });
    } else {
        return new Promise((resolve, reject) => {
            let err_message = "";
            let reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
            reader.read().then(function processText({done, value}) {
                // When no more data needs to be consumed, close the stream
                if (done) {
                    reject(err_message);
                    return;
                }
                // Enqueue the next data chunk into our target stream
                err_message += value;
                return reader.read().then(processText);
            });
        }).then((res) => {
            return (res)
        }).catch((err) => {
            return (err)
        });
    }
}).then((res) => {
    console.log(res)
}).catch((err) => {
    console.log(err)
});

来自https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/getReader

于 2021-03-09T03:12:26.820 回答