异步函数不会等到在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)我删除了所有参数。他们工作得很好。我实施了你的方法,效果很好。谢谢