0
在switch语句中是否可以有生成器? 由于在函数中可能不总是回传一个生成器?“可选”生成器在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里面的开关,但搬出来避免嵌套功能,但并没有帮助,也采用共尝试和与Promise一起合作。
一个函数或者是发电机或者它不是。它不应该(不能)在运行时决定它想做什么。 *主叫方将如何知道它决定的是什么? – deceze
你可以编写一个永远不会产生的生成器函数,但是你不应该写一个只有时返回一个生成器的函数。 – Bergi
那里'yield processSelectors($,data,selectorMappings);'调用? – Bergi