Node.js NodeJS mongo等待/异步函数
我正在写一个小项目,其中一部分我们将NodeJS与MongoDB结合使用 我收到一些代码问题,这意味着当我希望使用一组代码更新表时,表没有更新。但是,当我使用一段类似的代码而不使用async/await时,它会更新。我有点不确定这背后的原因?我想知道是否有人能帮忙。我更喜欢使用异步来确保在数据执行步骤之前返回数据,如果没有异步代码,有时会不一致Node.js NodeJS mongo等待/异步函数,node.js,mongodb,mongoose,async-await,Node.js,Mongodb,Mongoose,Async Await,我正在写一个小项目,其中一部分我们将NodeJS与MongoDB结合使用 我收到一些代码问题,这意味着当我希望使用一组代码更新表时,表没有更新。但是,当我使用一段类似的代码而不使用async/await时,它会更新。我有点不确定这背后的原因?我想知道是否有人能帮忙。我更喜欢使用异步来确保在数据执行步骤之前返回数据,如果没有异步代码,有时会不一致 collection.updateOne( {UIN: assetData.UIN, Company: assetData.compan
collection.updateOne(
{UIN: assetData.UIN, Company: assetData.company},
{ $set: assetObject },
{ upsert: true },
(err, res) => {
if(err) throw err;
console.log("Updated")
})
工作代码
await collection.updateOne(
{ UIN: assetData.UIN, Company: assetData.company },
{ $set: assetObject },
{ upsert: true })
.then( err => {
if (err){
console.log( 'err', err)
return false;
} else {
console.log("Document updated")
return true;
}
})
不工作的代码
await collection.updateOne(
{ UIN: assetData.UIN, Company: assetData.company },
{ $set: assetObject },
{ upsert: true })
.then( err => {
if (err){
console.log( 'err', err)
return false;
} else {
console.log("Document updated")
return true;
}
})
整体功能
async function assetUpdate(client, assetData){
//Updating the values on the asset table.
const assetObject = {
UIN: assetData.UIN,
Type: assetData.type,
Name: assetData.name,
Company: assetData.company,
Location: assetData.location
}
const collection = client.db("Cluster0").collection("Asset");
collection.updateOne(
{ UIN: assetData.UIN, Company: assetData.company },
{ $set: assetObject },
{ upsert: true },
(err, res) => {
if(err) throw err;
console.log("Updated")
})
}
我在尝试检索数据时也遇到了类似的问题,当时我刚刚编写了相当基本的nodej,但当我开始包含非同步特性时,我不喜欢这样
据我所知,代码基本相同,但底部的代码似乎不起作用
谢谢你的帮助 以下是将
异步
/等待
与返回承诺的函数一起使用的正确方法:
try {
const result = await collection.updateOne({
UIN: assetData.UIN,
Company: assetData.company
}, {
$set: assetObject
}, {
upsert: true
});
console.log('Document updated');
} catch (err) {
console.error(err);
throw err;
}
您需要为查询返回承诺,因为async/await可用于承诺的合并:
var updatePromise = () => {
return new Promise((resolve, reject) => {
collection.updateOne({
UIN: assetData.UIN,
Company: assetData.company
},
{ $set: assetObject} ,
{upsert: true});
});
});
//await myPromise
var result = await updatePromise();
这起作用了,谢谢。是什么原因使它没有进入我函数中的.then()中?我假设这是在等待响应,如果出现错误,就会捕获并输出它。再次感谢这是因为.then()
的回调不是(err,res)=>…
,而是res=>…
如果您想处理承诺
在没有异步
/等待的情况下抛出的错误,那么语法是。然后(res=>).catch(err=>)