如何在不返回的情况下将函数的结果发送给第三个函数?

时间:2017-08-16 06:58:48

标签: javascript node.js

我试图在NodeJS服务中调用Cloudant地图函数进行单元测试。

我已经创建了自己的发射功能,但我仍然无法获得视图以返回我需要的内容。

const data = {
    "_id": "68e3d2807c0faa169d504068db99e03f",
    "_rev": "2-c3b3249a2eb090e87dc4c053712691c3",
    "type": "user",
    "name": "Whatever",
    "email": "Whatever@google.com",
    "cn": "5517605X",
    "phone": null,
    "deleted": true
}

const emit = function (arg1, arg2) {
    return { key: arg1, value: arg2 };
};

var map = function (doc) {
    if (doc.type && doc.type === 'user') {
        emit([doc.cn, doc.deleted], doc);
    }
};

const result = map(data);
console.log(result);

JSFiddle我要做的事情。我知道我可以通过在emit函数前添加一个返回来修复它,但我无法编辑地图函数,因为我直接从Cloudant获取视图。

我还有办法让这项工作成功吗?

1 个答案:

答案 0 :(得分:0)

  

但我无法编辑地图功能

然后你不能改变map函数的回报。调用它将始终生成undefined。除了改变map(或使用别的东西)之外别无他法。

在您显示的特定情况下,emit可以关闭result,如果您将result声明移到emit之上并将其设为let

let result;
const emit = function (arg1, arg2) {
    result = { key: arg1, value: arg2 };
    return result;
};

var map = function (doc) {
    if (doc.type && doc.type === 'user') {
        emit([doc.cn, doc.deleted], doc);
    }
};

map(data);
console.log(result);

...但是这个代码非常具体,即使你没有采用全功能编程方法,也不会有像这样的副作用的函数。但有时需要。