异步函数不会等到在nodejs/javascript中执行被调用的异步函数
我正在调用一个异步函数,该函数获取数据,然后从另一个异步函数修改数据。但是,后者不会等到在调用的函数中修改数据。目前,只可能返回数据,而不返回被调用函数内部处理的任何内容,因为内部返回没有等待。我尝试异步等待被调用的函数,但这不起作用 这是函数的初始调用异步函数不会等到在nodejs/javascript中执行被调用的异步函数,javascript,node.js,asynchronous,promise,Javascript,Node.js,Asynchronous,Promise,我正在调用一个异步函数,该函数获取数据,然后从另一个异步函数修改数据。但是,后者不会等到在调用的函数中修改数据。目前,只可能返回数据,而不返回被调用函数内部处理的任何内容,因为内部返回没有等待。我尝试异步等待被调用的函数,但这不起作用 这是函数的初始调用 exports.addRequest = async (req, res) => { const requestResult = await RequestsModel.addRequestData(req.params.test
exports.addRequest = async (req, res) => {
const requestResult = await RequestsModel.addRequestData(req.params.test)
return res.send(requestResult);
};
这就是调用的函数
exports.addRequestData = async (test) => {
await Requests.findById(requestId)
.then((requestData) =>{
//(01)
if (requestData[type].filter(req => req[compareId] === requestDataObj[compareId]).length !== 0) return "exists";
if (requestData[complementaryType].filter(req => req[complementaryCompareId] === requestDataObj[complementaryCompareId]).length !== 0) return "exists_complementary";
//(02)
requestData[type].push(requestDataObj);
return requestData.save();
}, (err) => {
return err;
});
};
我删除了这些参数,因为它们工作正常。
我返回数据的唯一场景是返回整个下mongoose函数体。对于承诺和数据处理,上层函数似乎并不等待
非常感谢您的帮助,因为我刚刚开始使用NodeJ和异步函数
谢谢
Jakob尝试修改导出的
文件。addRequestData
如下
(我同意)
exports.addRequestData=async(测试)=>{
让requestData=wait Requests.findById(requestId);
if(requestData.isValid){//成功案例
//对requestData执行操作并返回它
}else{//错误案例
//返回错误
}
}
您应该重新构造.addRequestData()
,以便它利用异步
和等待
。目前,该函数不返回任何内容。将async
/wait
与混合使用。then()
通常是有问题的迹象。因此,将从.addRequestData()提取的数据返回到waiting函数,然后在那里进行处理,并调用另一个更新/删除的函数,这样做更有意义。基本上,将该函数中的wait
的返回值指定给变量,而不是.then()
。然后,.Then()
中的代码直接移动到addRequestData()
。然后return
语句返回调用函数。现在,我不确定.save()
的作用;如果它也是async
的,那么您应该返回该调用的wait
结果。好的,我知道了。这背后的逻辑是,一个用户可以请求另一个用户,我会仔细检查是否存在请求,如果没有,我会将请求作为子文档推送到mongodb文档中,然后保存。非常感谢您的帮助<代码>requestData[类型].push(requestDataObj)代码>我删除了所有参数。他们工作得很好。我实施了你的方法,效果很好。谢谢