我想运行查找方法进行搜索,如果有人“地方”具有我删除的“类别”的categoryId。 但是find方法是异步的,执行期间出现错误...

我的script.js:

module.exports = function(app){

 var categorie = app.models.categorie;
 var place = app.models.place;

 categorie.observe("before delete", function(ctx, next){
    place.find({ "categoryId": ctx.where.id },function(err, models){
        if(err){
            throw err;
        }
        if(models.length > 0){
            console.log("places avec categoryId");
            throw new Error('Impossible de supprimer, place(s) liée(s)');
        }
    });

    next();
 });
};

和错误:

places avec categoryId

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: Impossible de supprimer, place(s) liée(s)
at /home/pitt/myapp/server/boot/script.js:20:23
at Object.forward (/usr/lib/node_modules/strongloop/node_modules/strong-agent/lib/proxy.js:79:23)
at eval (eval at wrap (/usr/lib/node_modules/strongloop/node_modules/strong-agent/lib/proxy.js:193:20), <anonymous>:3:21)
at allCb (/home/pitt/myapp/node_modules/loopback-datasource-juggler/lib/dao.js:1232:7)
at /home/pitt/myapp/node_modules/loopback-connector-mongodb/lib/mongodb.js:597:7
at handleCallback (/home/pitt/myapp/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/utils.js:95:12)
at /home/pitt/myapp/node_modules/loopback-connector-mongodb/node_modules/mongodb/lib/cursor.js:571:16
at handleCallback (/home/pitt/myapp/node_modules/loopback-connector-mongodb/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:234:5)
at setCursorDeadAndNotified (/home/pitt/myapp/node_modules/loopback-connector-mongodb/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:424:3)
at Cursor.next (/home/pitt/myapp/node_modules/loopback-connector-mongodb/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:585:7)

#1楼 票数:0 已采纳

您不想在操作挂钩中throw err ,请使用下一个函数返回错误。

这是我想您要执行的操作:

module.exports = function(app){

 var categorie = app.models.categorie;
 var place = app.models.place;

 categorie.observe("before delete", function(ctx, next){
    place.find({ "categoryId": ctx.where.id },function(err, models){
        if(err){
            // pass error which will cancel the delete operation
            // i'm using return to stop execution as well
            return next(err);
        }
        if(models.length > 0){
            console.log("places avec categoryId");
            // you can also create your own new errors, just pass them to next as well
            return next(new Error('Impossible de supprimer, place(s) liée(s)'));
        }
        // because the find is async you need your next here, within the callback function so the earlier function knows to wait until this point.
        next();
    });
 });
};

  ask by Etienne Mizoule-Thabourin translate from so

未解决问题?本站智能推荐:

5回复

Node.js同步与异步

我目前正在学习 node.js,我看到了 2 个同步和异步程序示例(同一个)。 我确实理解回调的概念,但我试图了解第二个(异步)示例的好处,因为即使存在这种差异,他们两个似乎也在做完全相同的事情...... 你能详细说明为什么第二个例子会更好吗? 我很高兴得到更广泛的解释,这将有助于我理解这个概念。
1回复

JS同步和异步onclick函数

我最近一直在努力解决这个问题。 我不确定它是否与 JS 中的“同步/异步”函数有任何联系。 如果是这样,我会更感激了解这种联系。 我一直在制作一个简单的组件功能:有一个按钮“下一步”、“返回”和“重置”。 一旦按下匹配的按钮,它允许根据按钮的类型在链接之间移动。 链接是一个数组: 这是组件: 当我尝
3回复

如何在node.js中通过异步使同步功能?

我有一个返回类型函数: 当我第一次调用此函数时,它将返回空白,然后第二次返回我的值,再次运行后将返回所需值。 我正在调用此函数以在html页面中打印。 据我所知,该节点以异步方式运行。 您能帮我做同步吗? 在这种情况下,我需要使用generators吗? 帮助将不胜感激!
2回复

代码未在javascript中同步运行

我是 javascript 编程的新手。 我多年来一直在使用 C++/JAVA/Python 等经典语言工作,但我找不到一种方法来理解代码被分配为在 javascript 中运行的方式。 我想用 javascript 制作俄罗斯方块游戏,因为我有更多的设计优势。 部分代码如下所示: 以下代码显示游戏
1回复

在for循环后同步运行Nodejs程序

我想在所有for loop执行之后执行最后一个console statement ,但是当控制进入else语句时,该console语句executes immediately ,请帮助我解决此问题
1回复

PUREJavascript是同步的还是异步的?

根据我的理解,javascript 要么在浏览器中运行,要么在 Node.js 中作为后端运行。 浏览器或 Node.js,取决于您运行 javascript 的位置,将通过 Web API 或 C++ API 的处理函数阻止运行时(即网络调用、图像渲染等),然后将它们发送到事件循环并最终合并它们进
1回复

Node.js“q”包异步进行同步[重复]

这个问题已经在这里有了答案: 如何从异步调用返回响应? 36个答案 我正在使用q包将我的js代码从异步转换为同步。 我不知道我的理解是否正确。 我写了下面的代码片段 var Q = require('q') function onMessage() { conso
2回复

同步异步发出的异步调用

我很困惑 基本上,我有一个http REST API,可以向其发出异步请求并提供回调。 我还有一个Web前端,它将在任意时间在任意位置异步调用此api。 问题在于api需要“ nonce”。 每个后续请求都大于最后一个的数字。 以这种方式生成此数字很容易。 确保请求以正确的顺序到