CloudAnt是否支持ES6函数?在线视图编辑器箭头函数报错疑问
CloudAnt视图编辑器无法使用ES6箭头函数的原因分析
这不是编辑器的限制,而是CloudAnt/CouchDB视图函数执行环境的限制。
虽然CouchDB 3.x本身支持ES6语法,但视图函数(包括map、reduce函数)的执行环境是一个受限的沙箱,该沙箱并未完全支持所有ES6特性,尤其是箭头函数这类会改变this指向的语法。
你遇到的报错“this is not a function”,本质是箭头函数不绑定自身this,而CouchDB视图沙箱依赖传统函数的this上下文提供内置API(如emit等)。使用箭头函数会导致this指向丢失,沙箱无法识别内置方法,从而抛出错误。
解决方法很直接,将所有箭头函数替换为传统函数表达式即可:
function (keys, values, rereduce) { const uniqWith = function(arr, fn) { return arr.filter( function(element, index) { return arr.findIndex(function(step) { return fn(element, step); }) === index; } ); }; return uniqWith(values, function(a, b) { return a.moves === b.moves; }); }
另外需要注意:CouchDB视图沙箱对ES6的支持是有限的,像const、let这类声明语法通常可以正常使用,但涉及this绑定、生成器、Promise等特性的语法大概率会出现问题,编写视图函数时尽量使用ES5兼容的语法会更稳妥。
内容的提问来源于stack exchange,提问作者Jeff Lowery
相关产品推荐
相关产品推荐

