如何在node.js中同步运行此函数

时间:2017-08-10 15:59:02

标签: javascript node.js function asynchronous post

我想同步运行该功能。在我的申请中  在将资源分配给其他数据之前,需要创建供应源。 只有完成此任务才能进一步应用。 因为否则它会失败,因为创建了其他数据并且没有找到SupplySourceId(未找到)。

这里我想启动同步功能(processSupplySource();)

var articleSupplySourceId = processSupplySource();

功能ProcessSupplySource:

function processSupplySource(){
var postJson2 = {};
postJson2.articleNumber = entry['part-no'];
postJson2.name = entry['part-no'];
postJson2.taxName = 'Vorsteuer';
postJson2.unitName = 'stk';
postJson2.supplierNumber = "1002";
postJson2.articlePrices = [];
var articlePrices = {};
articlePrices.currencyName = 'GBP';
articlePrices.price = entry['ek-preisgbp'];
articlePrices.priceScaleType = 'SCALE_FROM';
articlePrices.priceScaleValue = '1';
postJson2.articlePrices.push(articlePrices);

return postSupplySource(postJson2);

功能PostSupplySource

function postSupplySource(postJson2) {

rp({
method: 'POST',
url: url + '/webapp/api/v1/articleSupplySource',
auth: {
    user: '*',
    password: pwd
},
body: postJson2,
json: true
}).then(function (parsedBody) {
    console.log('FinishArticleSupplySource');
            var r1 = JSON.parse(parsedBody);
            console.log(r1.id);
            return r1.id;
})
.catch(function (err) {
    console.log('errArticleSupplySource');
    console.log(err.error);
    // POST failed...
});
}

2 个答案:

答案 0 :(得分:0)

如果您使用节点8来获取您要查找的同步行为,则可以使用async / await。

否则,您需要使用像deasync这样的库来等待帖子完成并返回ID。

答案 1 :(得分:-1)

您可以将postSupplySource函数包装在一个promise中,并在结算时调用另一个函数。这将确保您在运行其他函数时拥有“sourceSupplyId”。除非出现错误。像这样:

    function postSupplySource(postJson2) {
    return new Promise(resolve, reject){  //**added
    rp({
    method: 'POST',
    url: url + '/webapp/api/v1/articleSupplySource',
    auth: {
        user: '*',
        password: pwd
    },
    body: postJson2,
    json: true
    }).then(function (parsedBody) {
        console.log('FinishArticleSupplySource');
                var r1 = JSON.parse(parsedBody);
                console.log(r1.id);
                resolve(r1.id); // ** added
    })
    .catch(function (err) {
        console.log('errArticleSupplySource');
        console.log(err.error);
        return reject(err); //*** added
        // POST failed...
    });
});
    }

然后你可以像这样调用其中的其他函数:

postSupplySource(postJson2)
.then((supplySourceId) => {
// supplySourceId is available.
// you can call other functions here.
}).catch((err) => {
 console.log(err);
});

希望我的问题是对的。

如同有人提到的那样,您可以使用asyc await。 如