我是NodeJ的新手,我发现JS的非阻塞和异步特性非常难以理解和处理,
我有一段代码应该迭代一个数组
并且对于每次迭代,我都应该进行数据库更新。
有人可以提供异步库功能的正确实现并帮助修复我的代码吗?
代码示例-
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->get();
答案 0 :(得分:1)
在数据库查询调用期间,在成功查询中不会调用您的回调,因此导致您的代码永远不会到达最终的回调。
您将要在if (err) { return callback(err); }
之后添加另一个return语句,以使异步知道您的数据库查询已完成。
还有另一件事,according to the docs,与每个方法的最终回调异步,在其回调中不调用结果。
所有iteratee函数完成或发生错误时调用的回调。用(err)调用。
因此,您不需要将值传递到iteratee函数中的回调语句中。
修改您的代码即可执行此操作。
conn.query(sqlQuery, sqlData, function (err, result) {
if (err) {
return callback(err);
}
return callback(null);
})
希望这会有所帮助。
答案 1 :(得分:0)
conn.query(sqlQuery, sqlData, async function (err, result) {
if (err) {
return await callback(err, false);
}
})
类似这样的事情..所以函数回调在这里async
,我们给了await
,实际上它一直等到返回调用结束。。