Request.post等待它结束NodeJS

时间:2018-07-10 22:31:43

标签: node.js post request

我必须依次进行多个REST API Post调用。 (第一个REST api的输出,第一个api的处理将输入到下一个)。

如何在返回之前完成NodeJS中的request.post()调用?我认为request.post()是异步的,我需要使其同步。我尝试使用回调,但是没有用。

function abc(ip, op) {
    let options = {
        url: 'http://localhost:123/s',
        form: {
            ipath: ip,
            opath: op
        }
    };
    request.post(options);
}

REST API调用

app.post('/s', (req,res)=>{
    gm(img_path).implode(-1.2).write(op_path, function(err) {
        if (err)
            console.log(err);
    })
});

1 个答案:

答案 0 :(得分:1)

您无法同步执行此操作,但是您可以将其包装在Promise中或使用request-promise,然后使用 async / < strong> await ,以在调用其他函数之前等待abc的结果。

const request = require('request-promise');

function abc(ip, op) {
    let options = {
        url: 'http://localhost:123/s',
        form: {
            ipath: ip,
            opath: op
        }
    };

    // This returns a promise when using request-promise
    return request.post(options);
}


async function myFunction() {

    const ip = ''; // Whatever ip / op are
    const op = '';

    const abcRes = await abc(ip, op);

    // This won't run until `abc` finishes
    const otherCallRes = await otherCall(abcRes);

    // Do something else with otherCallRes

    return otherCallRes;

}

myFunction()
  .then(console.log)
  .catch(console.error);