云功能触发多个集合

时间:2019-08-06 03:34:28

标签: javascript node.js google-cloud-functions

exports.myFunction = functions.firestore
    .document('users/{userID}')
    .onDelete((snap, context) => {
        // do something
    });

我也希望此函数也触发另一个集合,例如offices。无需复制并粘贴整个内容的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

路径中的任何内容都可以是通配符,因此如果要在所有集合上触发:

exports.myFunction = functions.firestore
    .document('{collectionName}/{userID}')
    .onDelete((snap, context) => {
        // do something
    });

虽然无法设置一个在两个但不是全部集合上触发的单一路径。如果需要的话,只需通过将代码隔离在(常规非Cloud)函数中来最大程度地减少代码重复:

exports.myFunction = functions.firestore
    .document('users/{userID}')
    .onDelete((snap, context) => {
        doSomething(...)
    });
exports.myFunction = functions.firestore
    .document('offices/{officeID}')
    .onDelete((snap, context) => {
        doSomething(...)
    });
function doSomething(...) {
    ...
}

答案 1 :(得分:0)

除了其他答案外,您还可以通过检查来执行通配符功能:

if(message.content.toLowerCase().includes('undefined')) message.channel.send("undefined check!");
else {
    var sent = false;
    for(var i = 0; i < message.embeds.length; i++) {
        if(message.embeds[i].title.toLowerCase().includes("test")) {
            message.channel.send("checked!");
            break;
        } else{
            for(var j = 0;j < message.embeds[i].fields.length;j++){
                if(message.embeds[i].fields[j].name.toLowerCase().includes("test") || message.embeds[i].fields[j].value.toLowerCase().includes("test")){
                  message.channel.send("checked!");
                  sent = true;
                  break;
                }
            }
            if(sent) break;
        }
    }
}