我想同步运行该功能。在我的申请中 在将资源分配给其他数据之前,需要创建供应源。 只有完成此任务才能进一步应用。 因为否则它会失败,因为创建了其他数据并且没有找到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...
});
}
答案 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
。
如