1

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

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

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

由于触发器向我发送了所有 Cloudant 事件(新的/修改的/删除的文档),我怎么能只将 NEW 文档事件转发给 Slack 而忽略诸如已删除文档之类的事情。

4

1 回答 1

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()将不起作用。您必须提供拒绝的理由。

于 2016-11-24T15:22:38.840 回答