ERR_STREAM_WRITE_AFTER_END при использовании обещания запроса Node Js - PullRequest
1 голос
/ 05 мая 2020

У меня есть обещание запроса, которое используется для вызова другого API с небольшими нагрузками, вот мое обещание запроса

вот мой контейнер

    if (!req.uploadedFile2) {
        opt2 = {
            method: 'POST',
            body: {
                token: req.body.token,
                name: req.body.name,
                id_type: req.body.id_type,
                id_no: req.body.id_no,
                mobile_phone: req.body.phone,
                email: req.body.email,
                address: req.body.address,
                postal_code: req.body.postal_code,
                dob: req.body.dob,
                product_code: req.body.product_code,
                billing_phone: req.body.billing_phone,
                callback_url: 'purchase',

            },
            formData: {
                images: fs.createReadStream(req.uploadPic),
            },
            uri: `${process.env.Heeey}purchase/test/test_more`,
            json: true,
        };
    }

    const obj = {
        name: req.body.name,
        id_no: req.body.id_no,
        id_type: req.body.id_type,
        mobile_phone: req.body.phone,
        birth_date: moment(req.body.dob, 'DD-MM-YYYY').format('YYYY/MM/DD'),
        postal_code: req.body.postal_code,
    };



и здесь я отправлю свое обещание запроса после создания dbUserContainer

    return dbUserContainer
        .create(obj)
        .then(() => rp(opt2)
            .then((results) => {
                setContent(200, results.result);
                return res.status(200).json(getContentSuccess());
            }).catch((error) => {
                setContent(400, error);
                return res.status(400).json(getContentFailOutside(error));
            }))
        .catch((error) => {
            setContent(400, error);
            return res.status(400).json(getContentFailOutside(error));
        });

когда я выполняю этот код через почтальона, я всегда получаю это сообщение

{
    "code": "ERR_STREAM_WRITE_AFTER_END"
}

после исследования я попытался использовать тайм-аут, чтобы дать время fs.createReadStream для чтения и транспортировать вот то, что я пробовал до сих пор

    return dbUserContainer
        .create(obj)
        .then(() => {
            const dataRP = () => rp(opt2)
                .then((results) => {
                    setContent(200, results.result);
                    return res.status(200).json(getContentSuccess());
                }).catch((error) => {
                    setContent(400, error);
                    return res.status(400).json(getContentFailOutside(error));
                });

            setTimeout(dataRP, 2000);
        })
        .catch((error) => {
            setContent(400, error);
            return res.status(400).json(getContentFailOutside(error));
        });

но я всегда получаю, но, к сожалению, я получаю то же сообщение об ошибке в почтальоне с указанием ERR_STREAM_WRITE_AFTER_END t та же ошибка

...