函数返回undefined,期望Promise或值async方法

时间:2018-04-11 14:44:08

标签: javascript firebase ecmascript-6 promise google-cloud-functions

我有一个名为generateSession的异步方法。我希望promises系统等到呼叫完成。我等到数据存在,然后删除数据库中的行。就目前而言,这没有任何意义。

但是我在这种状态下遇到错误。 Function returned undefined, expected Promise or value看起来这来自调用generateSession。但我不知道如何解决它。

 exports.pending = functions.database
        .ref('/groups/{groupId}/status/pending/{deviceId}/')

    .onCreate(event => {
         generateSession().then(function(data) {
            console.log("generated session:" + data.sessionId);
            return event.data.ref.set({})
        }).catch(function(err) {
            console.log("error:", err);
        });
    });

var generateSession = function(){
    // *** Return a promise
    return new Promise(function(resolve, reject) {
        opentok.createSession({mediaMode:"relayed"}, function(err, session){
            if (err) {
                reject(err);
            } else {
                resolve(session);
            }
        });
    });
};

1 个答案:

答案 0 :(得分:1)

Firebase功能的onCreate本身需要返回Promise:

exports.pending = functions.database
        .ref('/groups/{groupId}/status/pending/{deviceId}/')

    .onCreate(event => {
        // You should return the result of generateSession() here
        return generateSession().then(function(data) {
            console.log("generated session:" + data.sessionId);
            return event.data.ref.set({})
        }).catch(function(err) {
            console.log("error:", err);
            // You probably don't want to catch here, let the error
            // go through so that Cloud Functions can pick it up
        })
    });