【问题标题】:OpenWhisk stops responding, after the first callOpenWhisk 在第一次调用后停止响应
【发布时间】:2018-08-29 22:06:58
【问题描述】:

我在 Windows 10 上使用 Vagrant VM。我在 Node.Js 中编写了一个动作函数。这是一个轻量级的实验功能,用于从 OpenWhisk 操作检查与 MongoDB 的连接,用 Node.JS 编写。以下是代码。

     function entryPoint(args) {



        var mongoose = require('mongoose');
        var MongoClient = require('mongodb').MongoClient;
        var Schema = mongoose.Schema;

        mongoose.Promise = global.Promise;


        return new Promise((resolve, reject) => {

          mongoose.connect("mongodb://192.168.16.1:27017/angularcrud").then(
            () => 
            {

              var Coin = new Schema({ 
                name: {
                  type: String
                },
                price: {
                  type: Number
                }
              });
              var coinModel = mongoose.model('Coin', Coin);

              coinModel.find(function (err, coins){
                if(err){
                  console.log(err);
                }
                else {
                  resolve({coins})
                }
              });

            },
            err => { return reject(err)}
            ); 

        })



      }

 module.exports.main = entryPoint;

我已经压缩了 NodeJS 文件并在 wsk 中创建了动作。当我第一次运行这个 我得到了预期的结果。但是当我第二次运行它时,调用一分钟左右,然后我看到以下错误。

ok: invoked /_/getcoins, but the request has not yet finished, with id 612da4ebb5f64795ada4ebb5f6e7957c

我不知道从哪里开始调查,因为我对 OpenWhisk 和 MongoDb 都是全新的。

【问题讨论】:

    标签: mongodb openwhisk


    【解决方案1】:

    要开始调查此问题,请在本例中使用 wsk activation list 612da4ebb5f64795ada4ebb5f6e7957c 至少获取您失败激活的日志。

    我认为您操作中的错误处理不正确。如果 find 调用返回错误,则 Promise 永远不会被解析。

    我简要查看了mongooses 文档。 find 显然可以返回一个 Promise 如果你在上面调用 exec

    在任何情况下,请确保尽可能多地使用 Promise 组合器,这样您几乎可以保证任何边缘情况都得到正确处理,并且 Promise 总是以一种或另一种方式完成。如果您需要退出“手动”创建 Promise,请将它们的范围尽可能小。

    function entryPoint(args) {
        var mongoose = require('mongoose');
        var Schema = mongoose.Schema;
        mongoose.Promise = global.Promise;
    
        return mongoose.connect("mongodb://192.168.16.1:27017/angularcrud").then(() => {
            var Coin = new Schema({ 
                name: {
                    type: String
                },
                price: {
                    type: Number
                }
            });
            var coinModel = mongoose.model('Coin', Coin);
            return coinModel.find().exec();
        });
    }
    
     module.exports.main = entryPoint;
    

    【讨论】:

    • 通过使用 wsk activation list 命令,我可以看到实际的错误信息和具体问题。该问题与模型创建有关。第二次运行时没有创建“硬币”模型。这是当我从 wsk CLI 调用操作时引起的,但是当我从 node.js 中的 openwhisk npm 包调用操作时,我没有遇到这个问题。谢谢!
    【解决方案2】:

    我基于命令的一些评论: 1.请求还未完成,id为612da4ebb5f64795ada4ebb5f6e7957c 尝试“wsk -i activation get 612da4ebb5f64795ada4ebb5f6e7957c”以查看有关此激活的信息。它应该是那里的状态或结果。

    1. 我怀疑这是一个异步调用。我建议您也可以尝试“wsk -i action invoke --blocking”等待结果返回。 --blocking 表示返回结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-05
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多