【问题标题】:IBM Cloud Functions: Use async calls in NodejsIBM Cloud Functions:在 Nodejs 中使用异步调用
【发布时间】:2021-10-18 00:52:12
【问题描述】:

我在 Cloud.ibm.com 上以访问 Cloudant 数据库的操作中运行此代码:

 async function main(params) {
     const cloudant = Cloudant({
         url: params.COUCH_URL,
         plugins: { iamauth: { iamApiKey: params.IAM_API_KEY } }
     });
 
 
     try {
         
         let dbList = await cloudant.db.list();
         let db = await cloudant.use('dealerships')
         let result = await db.get("ddb5ed4f65d21bf4a4da409b8bc4b70a")
         
         let query = {
           "selector": {
              "_id": "ddb5ed4f65d21bf4a4da409b8bc4b70a"
           },
           "fields": [
              "_id",
              "_rev"
           ],
           "sort": [
              {
                 "_id": "asc"
              }
           ]
        }
         let result2 = await db.find(query, function(err, data){
            return data;
         });
         
         let indexes_result = await db.index(function(err, result) {
          if (err) {
            throw err;
          }
          else{
              return result
          }
         let indexes_ = {};
          
          return indexes_

        });
         
         return {
             "dblist": dbList,
             "result": result,
             "result2": result2,
         }
         
          } catch (error) {
         return { error: error.description };
     }
 
 }

我的结果如下:

Results:
{
  "dblist": [
    "alice",
    "celina",
    "dealerships",
    "gaetan",
    "guestbook",
    "reviews"
  ],
  "result": {
    "_id": "ddb5ed4f65d21bf4a4da409b8bc4b70a",
    "_rev": "1-34e7ebd07643af43db578a46ee1d6365",
    "address": "3 Nova Court",
    "city": "El Paso",
    "full_name": "Holdlamis Car Dealership",
    "id": 1,
    "lat": 31.6948,
    "long": -106.3,
    "short_name": "Holdlamis",
    "st": "TX",
    "state": "Texas",
    "zip": "88563"
  }
}
Logs:
[]

所以结果对象中没有我的 result2,我不知道发生了什么。我希望我可以访问一些日志和一些错误以了解问题所在,但我无权访问任何内容。

谁能给我一个访问日志和错误的方法?

【问题讨论】:

  • “在行动中”是什么意思?您是指 IBM Cloud Functions 吗?
  • 是的。在 IBM Cloud Functions 中有操作和序列。我指的是一个动作

标签: node.js ibm-cloud cloudant openwhisk ibm-cloud-functions


【解决方案1】:

我发现我尝试使用的功能是这样的:

let result2 = await db.find(query, function(err, data){
            return data;
         });
         
         let indexes_result = await db.index(function(err, result) {
          if (err) {
            throw err;
          }
          else{
              return result
          }

必须在没有回调的情况下使用:即像这样:

let result2 = await db.find(query);
         
let indexes_result = await db.index();

我不知道为什么他们在文档中显示这些回调:https://github.com/cloudant/nodejs-cloudant https://www.npmjs.com/package/@cloudant/cloudant

如果有人知道他们为什么使用这些配方,我会很高兴知道!

【讨论】:

  • 该库支持承诺和回调,Getting Started 显示了使用异步/等待风格、承诺链风格和回调风格的示例。并非所有示例都以每种可能的样式重复。
【解决方案2】:

您的 IBM Cloud Functions 操作可以使用异步代码。对于 Node.js,请查看 Functions documentation 以了解如何修复它。您需要使用 Promise

您可以在dashboard 中查看您的操作的激活日志,或使用 CLI / API 或通过 SDK 检索它们。

顺便说一句:在您自己的回答中,您指的是 Cloudant 文档。它独立于 IBM Cloud Functions / OpenWhisk。

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 2020-08-29
    • 2023-04-10
    • 1970-01-01
    • 2016-07-05
    • 2018-08-06
    • 2020-02-08
    • 2018-07-03
    • 2021-06-05
    相关资源
    最近更新 更多