如何在OpenWhisk中中断序列流?

时间:2016-11-24 15:22:39

标签: ibm-cloud openwhisk

我在Cloudant数据库上编写了一个触发器,该数据库应该将每个新文档转换为Slack通知。

我创建了一系列两个动作:一个准备Slack消息,一个发送消息。要使用IBM Bluemix OpenWhisk提供的包操作发送Slack消息。

Cloudant更改Feed - >准备文本 - > Slack Post - >响应

当触发器向我发送所有Cloudant事件(新的/修改/删除的文档)时,我怎样才能转发Slack新文档事件并忽略已删除文档等内容。

1 个答案:

答案 0 :(得分:2)

对于同步处理,只需在我们的操作中返回错误

function main(doc) {
  if (doc._deleted) {
    // ignore deleted documents
    return { error: "ignoring deleted doc" };
  } else {
    // prepare the text for the Slack post action
    const slackMessage = ...
    return { text: slackMessage };
  }
}

return new Error("ignoring deleted doc")也有效。

或者使用Promise对象,可以调用reject(reason)来中断序列流

function main(doc) {
  return new Promise((resolve, reject) => {
    if (doc._deleted) {
      // ignore deleted documents
      reject({ error: "ignoring deleted doc" });
    } else {
      // prepare the text for the Slack post action
      const slackMessage = ...
      resolve({ text: slackMessage });
    }
  };
}

reject的调用将停止序列流程。 reject('interrupted!')reject(new Error('interrupted!')reject({ error: 'interrupted!' })中的任何一个。

警告:reject()无效。您必须提供拒绝的理由。