“optional"switch语句内的生成器
"optional" generator inside a switch statement?
是否可以在switch语句中使用生成器?如在函数中可能不总是回传一个生成器?
在代码:function* getWebsite ($) {
const contents = $('.selector-blah');
if (contents) {
const resp = yield http.getHTML({ url: contents.href });
return resp.finalUrl;
} else {
return null;
}
}
const selectorMappings = {
name: '#name',
starRating: getStarRating, // normal function
website: getWebsite // generator function
}
yield processSelectors($, data, selectorMappings);
// <code> here is excuting before yield is complete above.
processSelectors模块:
const _ = require('lodash');
const sanitizeText = require('./sanitizeText');
module.exports = function* processSelectors ($, data, selectors = {}, route = '') {
const keys = Object.keys(selectors);
for (let key of keys) {
let path = route ? route + '.' + key : key;
switch (selectors[key].constructor.name) {
case 'String':
_.set(data, path, sanitizeText($(selectors[key]).first().text()));
break;
case 'Function':
_.set(data, path, selectors[key]($));
break;
case 'GeneratorFunction':
var result = yield selectors[key]($);
_.set(data, path, result);
break;
case 'Object':
_.set(data, path, {});
processSelectors($, data, selectors[key], path);
break;
}
}
};
我确实在forEach中有开关,但为了避免嵌套函数而移出,但没有帮助,也尝试使用co和co.wrap,以及Promise。
通过将整个东西设置为生成器来实现:
yield processSelectors($, data, selectorMappings);
////////////////////////////////////////////////////////
// MODULE //
////////////////////////////////////////////////////////
const _ = require('lodash');
const sanitizeText = require('./sanitizeText');
module.exports = function* processSelectors ($, data, selectors = {}, route = '') {
const keys = Object.keys(selectors);
for (let key of keys) {
let path = route ? route + '.' + key : key;
switch (selectors[key].constructor.name) {
case 'String':
_.set(data, path, sanitizeText($(selectors[key]).first().text()));
break;
case 'Function':
_.set(data, path, selectors[key]($));
break;
case 'GeneratorFunction':
_.set(data, path, yield selectors[key]($));
break;
case 'Object':
_.set(data, path, {});
processSelectors($, data, selectors[key], path);
break;
}
}
};
相关文章:
- Node.js-承诺和锥形语句(if、switch等)-如何构建
- switch语句中的Javascript作用域
- 我可以用javascript中的switch或case语句重构if-else吗
- switch语句中出错,Javascript
- 使用 switch 语句更改页面正文
- Javascript-尝试使用switch语句
- 如何将这个简单的switch语句重写得更简洁
- Js提示:“;期望一个赋值或函数调用,而看到一个表达式“;,Switch语句
- Switch语句比较用户输入的Javascript
- 使用 Javascript switch 语句,如何计算数组中元素的数量(仅数字)
- 为什么这个switch语句没有像预测的那样运行
- switch语句中的数字比较失败
- javascript switch语句/case表达式
- 为什么这个 JavaScript switch 语句(在 for 循环内)保留了上一次迭代的值
- jQuery窗口'hashchange'switch语句效率
- 如何在switch语句中使用NaN大小写
- 范围的Switch语句不起作用
- 带有输入文本的 JavaScript switch 语句
- 使用Javascript switch语句在DIV中显示HTML表
- Switch语句jQuery不适用于单选按钮值