IBM Cloud Functions:在 Nodejs 中使用异步调用

Posted

技术标签:

【中文标题】IBM Cloud Functions:在 Nodejs 中使用异步调用【英文标题】:IBM Cloud Functions: Use async calls in 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 中有操作和序列。我指的是一个动作 【参考方案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。

【讨论】:

以上是关于IBM Cloud Functions:在 Nodejs 中使用异步调用的主要内容,如果未能解决你的问题,请参考以下文章

IBM Cloud Functions 和 Node.js:如何获取日本时间?

IBM Cloud Functions Service 在尝试创建与 Cloudant 操作的新绑定时无法检索数据库列表

Cloud Functions 返回 403 错误也具有 Cloud Functions Invoker 权限

Cloud PubSub 重复消息触发的 Cloud Functions

在 Cloud Functions 中使用 Cloud Firestore 数据

如何使用 Google Python Client for Cloud Functions 获取 Google Cloud Functions 列表?