Node 中的 Promise 不起作用 - .then 未定义

沙彦汗

我有一个非常奇怪的问题,我的 Promise 的 .then 不起作用。错误如下:

类型错误:无法读取未定义的属性“then”

我称之为奇怪的原因是因为我在其他地方使用相同的结构并且它完美无缺。我还想补充一点,它应该做的实际行动 - 确实完成了!所以这纯粹是我的 Promise 的“编码”方式的问题——只是语法糖。

我的代码片段如下:

var updateAllUnreadNotifications = function(){
    userModel.aggregate([
        {$match:{"profileID": 123}},
        {$unwind: "$notifications"},
        {$match:{"notifications.read": false}},
        {$group: {_id:"$_id", notifications: {$push:"$notifications"}}}
        ], function(err, notifications){
             var notificationPromises = notifications.map(function(notification) {
                return new Promise(function(resolve){
                    userModel.findOneAndUpdate(
                        {profileID: 123, "notifications.id": notification.id},
                        {"notifications.$.read": true},
                        {safe: true},
                        function(err, result) {
                            if (err){
                               return;
                            } else if (result){
                                resolve(notification);
                            }
                        }
                    );
                });
            });

            return Promise.all(notificationPromises);
        });
};

updateAllUnreadNotifications()
.then(function(notifications){
    res.json({
        message: 'All is well'
    });
});

此外,我notificationPromises做了一个console.log,它看起来确实像一个Promises 链。当然,结果变量也在那里,所以这不是 DB 命令的问题。

我搞砸了什么?我相信这将是一个非常明显的问题,但对于我的生活,我无法孤立它。

如果需要更多信息,请告诉我。

普拉卡什·夏尔马

您需要promiseupdateAllUnreadNotifications函数返回但不会从该函数返回任何内容。这就是您收到该错误的原因。

我会说更好的方法是制作一个单独的函数来处理通知并像这样链接承诺

    var updateAllUnreadNotifications = function(){
      return new Promise(function(resolve,reject){
        userModel.aggregate([
            {$match:{"profileID": 123}},
            {$unwind: "$notifications"},
            {$match:{"notifications.read": false}},
            {$group: {_id:"$_id", notifications: {$push:"$notifications"}}}
            ], function(err, notifications){
                 if(err){ reject(err)}
                 // If got notifications then resolve
                 // notifications will be available to next then function
                 resolve(notifications)
             })
         })
      }

      var processNotifications = function(notifications) {
         var notificationPromises = notifications.map(function(notification) {
              return new Promise(function(resolve){
                 userModel.findOneAndUpdate(
                    {profileID: 123, "notifications.id": notification.id},
                     {"notifications.$.read": true},
                            {safe: true},
                            function(err, result) {
                                if (err){
                                   return;
                                } else if (result){
                                    resolve(notification);
                                }
                            }
                        );
                    });
                });

         return Promise.all(notificationPromises);
       };

    // Chain one extra then here to process notifications
    updateAllUnreadNotifications().then(processNotifications)
    .then(function(notifications){
        res.json({
            message: 'All is well'
        });
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Promise在Javascript中不起作用,返回未定义

来自分类Dev

Promise 在 Node JS 中不起作用

来自分类Dev

返回新的Promise()在Node.js中不起作用

来自分类Dev

var在Promise中变得未定义

来自分类Dev

Axios Promise中未定义的功能

来自分类Dev

Node.js(Express API):req.body.myobject未定义且不起作用

来自分类Dev

通过JavaScript选择菜单:在Mozilla中不起作用(“未定义”),但在Chrome中起作用

来自分类Dev

Phonegap构建应用程序中未定义的Phonegap功能-同样pushNotifications不起作用

来自分类Dev

类型脚本中的getter不起作用!它总是抛出错误或返回未定义

来自分类Dev

Phonegap构建应用程序中未定义的Phonegap功能-同样pushNotifications不起作用

来自分类Dev

移植到函数中时代码不起作用:“未捕获的ReferenceError:未定义svg”?

来自分类Dev

ember js中的Flash消息不起作用。创建Flash对象时对象未定义

来自分类Dev

在 html 中调用的 Javascript 函数不起作用(未定义的错误)

来自分类Dev

散景嵌入在 Flask 中不起作用(散景未定义)

来自分类Dev

Laravel 中的编辑页面不起作用(未定义的变量分支)

来自分类Dev

componentWillReceiveProps 在我的 React 应用程序中不起作用。它显示为未定义

来自分类Dev

Node JS:Promise 解析值为“未定义”

来自分类Dev

BackgroundGeolocation 不起作用,未定义

来自分类Dev

.then()在node.js中不起作用

来自分类Dev

node.js 嵌套的 http req 对象未定义 - bodyParser.urlencoded({ extended: true } 不起作用

来自分类Dev

为什么我从Promise中得到未定义?- 更新

来自分类Dev

具有jQuery验证的Bootstrap表单不起作用,在jQuery中引发未定义的函数错误

来自分类Dev

具有jQuery验证的Bootstrap表单不起作用,在jQuery中引发未定义的函数错误

来自分类Dev

Ajax 将数组保存到全局变量中不起作用不断变得未定义

来自分类Dev

template.path_without_format_and_extension 在 rails 3.0.3 中不起作用。获取未定义的方法模板

来自分类Dev

如果在 react-native 0.59 中未定义其初始值,则 Mobx @observable 不起作用

来自分类Dev

Node.js中的错误“未定义窗口”

来自分类Dev

node.js中返回的unirest响应未定义

来自分类Dev

app.get在Node / Express中返回未定义

Related 相关文章

  1. 1

    Promise在Javascript中不起作用,返回未定义

  2. 2

    Promise 在 Node JS 中不起作用

  3. 3

    返回新的Promise()在Node.js中不起作用

  4. 4

    var在Promise中变得未定义

  5. 5

    Axios Promise中未定义的功能

  6. 6

    Node.js(Express API):req.body.myobject未定义且不起作用

  7. 7

    通过JavaScript选择菜单:在Mozilla中不起作用(“未定义”),但在Chrome中起作用

  8. 8

    Phonegap构建应用程序中未定义的Phonegap功能-同样pushNotifications不起作用

  9. 9

    类型脚本中的getter不起作用!它总是抛出错误或返回未定义

  10. 10

    Phonegap构建应用程序中未定义的Phonegap功能-同样pushNotifications不起作用

  11. 11

    移植到函数中时代码不起作用:“未捕获的ReferenceError:未定义svg”?

  12. 12

    ember js中的Flash消息不起作用。创建Flash对象时对象未定义

  13. 13

    在 html 中调用的 Javascript 函数不起作用(未定义的错误)

  14. 14

    散景嵌入在 Flask 中不起作用(散景未定义)

  15. 15

    Laravel 中的编辑页面不起作用(未定义的变量分支)

  16. 16

    componentWillReceiveProps 在我的 React 应用程序中不起作用。它显示为未定义

  17. 17

    Node JS:Promise 解析值为“未定义”

  18. 18

    BackgroundGeolocation 不起作用,未定义

  19. 19

    .then()在node.js中不起作用

  20. 20

    node.js 嵌套的 http req 对象未定义 - bodyParser.urlencoded({ extended: true } 不起作用

  21. 21

    为什么我从Promise中得到未定义?- 更新

  22. 22

    具有jQuery验证的Bootstrap表单不起作用,在jQuery中引发未定义的函数错误

  23. 23

    具有jQuery验证的Bootstrap表单不起作用,在jQuery中引发未定义的函数错误

  24. 24

    Ajax 将数组保存到全局变量中不起作用不断变得未定义

  25. 25

    template.path_without_format_and_extension 在 rails 3.0.3 中不起作用。获取未定义的方法模板

  26. 26

    如果在 react-native 0.59 中未定义其初始值,则 Mobx @observable 不起作用

  27. 27

    Node.js中的错误“未定义窗口”

  28. 28

    node.js中返回的unirest响应未定义

  29. 29

    app.get在Node / Express中返回未定义

热门标签

归档