Node.js 未处理的PromisejectionWarning:TypeError:cb不是loopback.js中的函数

Node.js 未处理的PromisejectionWarning:TypeError:cb不是loopback.js中的函数,node.js,loopbackjs,Node.js,Loopbackjs,我有以下代码: Orders.js Orderservice.js 对于其他模型和服务,我有类似的代码,我缺少什么?当您定义remoteMethod时,参数的数量必须始终等于remoteMethod的accepts属性中定义的参数数量加上cb。在您的例子中,accepts属性中定义了两个参数,因此函数应该如下所示: Orders.history = function(token, base_token, cb) { console.log("getting history");

我有以下代码:

Orders.js

Orderservice.js


对于其他模型和服务,我有类似的代码,我缺少什么?

当您定义remoteMethod时,参数的数量必须始终等于remoteMethod的accepts属性中定义的参数数量加上cb。在您的例子中,accepts属性中定义了两个参数,因此函数应该如下所示:

Orders.history = function(token, base_token, cb) {
    console.log("getting history");
    orderService.getHistory(token, cb)
        .catch(err => cb(err));
};
我还建议您将Orders.history更改为异步函数,并完全远离回调。从版本2开始。该功能可定义如下:

Orders.history = async function(token, base_token) {
    console.log("getting history");
    return orderService.getHistory(token); // must return a promise
};

它可能需要您进行一些代码重构,但它允许您编写更干净的代码,并且您不必担心异常处理问题,因为环回支持异步函数的开箱即用功能。

当您定义remoteMethod时,参数的数量必须始终等于接受remoteMethod的属性加上cb。在您的例子中,accepts属性中定义了两个参数,因此函数应该如下所示:

Orders.history = function(token, base_token, cb) {
    console.log("getting history");
    orderService.getHistory(token, cb)
        .catch(err => cb(err));
};
我还建议您将Orders.history更改为异步函数,并完全远离回调。从版本2开始。该功能可定义如下:

Orders.history = async function(token, base_token) {
    console.log("getting history");
    return orderService.getHistory(token); // must return a promise
};

它可能需要您进行一些代码重构,但它可以让您编写更干净的代码,而且您不必担心异常处理问题,因为环回支持异步函数的开箱即用功能。

我首先要记录cb inside Orders.history,看看它是什么,检查一下它叫什么这里有两个需要通过的材料,cb应该是第三个。谢谢,这就解决了。嗨@user3288346,下面的答案有用吗?我先记录cb inside Orders.history,看看它是什么,然后检查它叫什么。这里有两个parmater需要通过,cb应该是第三个。谢谢,这就解决了。嗨@user3288346,下面的答案有用吗?
Orders.history = async function(token, base_token) {
    console.log("getting history");
    return orderService.getHistory(token); // must return a promise
};