NodeJs-异步函数javascript
我正在NodeJs中制作一个api,我有一个通过post调用的函数,但是在转发到精确的存储库之前,我运行了函数NodeJs-异步函数javascript,javascript,node.js,Javascript,Node.js,我正在NodeJs中制作一个api,我有一个通过post调用的函数,但是在转发到精确的存储库之前,我运行了函数getProduct(idProd,product),但是正在执行console.log('product->'+product.name)在运行getProduct(idProd,product)功能之前。我不知道如何让它等待其他函数完成。我已经尝试添加了异步和等待,但没有成功 exports.postItemProduto = async function (req, res) {
getProduct(idProd,product)
,但是正在执行console.log('product->'+product.name)代码>在运行getProduct(idProd,product)
功能之前。我不知道如何让它等待其他函数完成。我已经尝试添加了异步和等待,但没有成功
exports.postItemProduto = async function (req, res) {
try {
var idProd = req.body.produtoPrincipal;
await getProduto(idProd, produto);
console.log('produto -> '+ produto.nome);
itemService.insertItem(req, function (err) {
if (err) {
return res.status(412).send({
success: false
});
}
return res.send({
success: true,
message: 'Item registado com sucesso!'
});
})
} catch (err) {
console.log(err);
return res.status(400).send({
error: 'Erro criar item'
});
};
};
function getProduto(id, produto){
var url = 'url/api/produtos/'+id;
axios
.get(url)
.then(response => {
/* let produto = new ProductDto(); */
produto.produtoId = response.data.productId;
produto.nome = response.data.nome;
produto.descricao = response.data.descricao;
produto.material_AcabamentoID = response.data.material_AcabamentoID;
produto.restrictionId = response.data.restrictionId;
/* let restriction = new RestrictionDto();
restriction = getRestriction(jsonData[i].restrictionId); */
console.log('produto -->' + produto.nome);
}).catch(error => {
console.log(error);
});
}
把这个翻译放在问题中-无论如何,getProduto
需要返回一些东西作为开始,如果您希望wait
它,那么它应该返回一个承诺-因为wait
等待什么,承诺解析produto是全局变量。我不知道在这种情况下如何做承诺,因为你没有展示它的功能(除了console.log),那么我怀疑有人能帮我更新代码,在这一刻,我只需要produto对象,所有的函数都在工作,但我无法在导出时获得produto。PostTemproduto这是完整的代码吗?在调用之前,等待getProduto(idProd,produto);哪里都没有produto。。。不管怎样,还是向等待和异步函数移动:检查以下内容:
exports.postItemProduto = function (req, res) {
try {
var idProd = req.body.produtoPrincipal;
console.log('id --> ' + idProd);
getProduto(idProd, function(produto) {
console.log('produto -> ' + produto.nome);
});
itemService.insertItem(req, function (err) {
if (err) {
return res.status(412).send({
success: false
});
}
return res.send({
success: true,
message: 'Item registado com sucesso!'
});
})
} catch (err) {
console.log(err);
return res.status(400).send({
error: 'Erro criar item'
});
};
};
function getProduto(id, callback) {
var url = 'url/api/produtos/' + id;
axios
.get(url)
.then(response => {
/* let produto = new ProductDto(); */
produto.produtoId = response.data.productId;
produto.nome = response.data.nome;
produto.descricao = response.data.descricao;
produto.material_AcabamentoID = response.data.material_AcabamentoID;
produto.restrictionId = response.data.restrictionId;
/* let restriction = new RestrictionDto();
restriction = getRestriction(jsonData[i].restrictionId); */
callback(produto);
}).catch(error => {
console.log(error);
});
}