回调不是一个功能:我做错了什么?

时间:2016-01-28 22:18:06

标签: javascript node.js callback

我正在对Redis进行异步调用并尝试使用回调来通知async.js查询已完成。我一直遇到一个错误,说明"回调不是一个功能"。

我在这里做错了什么?

            "check": function (redisListItem, dataElement, callback) {
                let lookupKey = redisListItem.table + dataElement;
                let virtualField = redisListItem.virtualName;

                client.get(lookupKey, function (err, reply) {
                        if (err) {
                            return callback(err)
                        }
                        else {
                            session.virtual[virtualField] = reply;
                            callback(session);
                        }

                });
            }

拨打"检查"正在做如下:

    "condition": function(R) {
        var self = this;
        async.series([
            function(R){

/////////THE CALL TO CHECK ////////
                R.check(List.redisTables.List.negEmail, self.customer.email)

            }.bind(this,R),
            function(R) {
                R.when(this.virtual.negEmail === "true")
            }.bind(this,R)
        ])
    }

1 个答案:

答案 0 :(得分:6)

R.check(List.redisTables.List.negEmail, self.customer.email)只有两个参数,第三个参数,应该是一个函数,缺少,即它未定义

R.check(List.redisTables.List.negEmail, self.customer.email, function(session) {
    // do something when "check()" has completed
})

作为旁注,您应该坚持使用Node约定,并传递错误和数据

client.get(lookupKey, function (err, reply) {
      if (err) {
           return callback(err, null)
      } else {
           session.virtual[virtualField] = reply;
           callback(null, session);
      }
});

这样你就可以实际检查错误

R.check(List.redisTables.List.negEmail, self.customer.email, function(err, session) {

    if (err) throw new Error('fail')

    // do something when "check()" has completed
})