如何在recursion生成器函数中产生请求?

我创build了一个生成器函数recursion检查一个string,并返回一个parsing的输出。 我正在尝试使用koa-request在生成器中发出请求,但是它正在返回undefined。

var parseUserExpression = function *() { var body = yield bodyParser.json(this); var fnString = body.ts; var res = yield parseRulesAndFunctions(fnString, null); this.body = res; }; // Recursive function var parseRulesAndFunctions = function *(aStr, start) { var res; start = start || 0; var fnDetails = getFnDetails(aStr, start); if (fnDetails.fnType === 'run') { var url = yield request(fnDetails.url); res = aStr.slice(0, fnDetails.startIndex) + 'yield request(' + fnDetails.fnName + ',' + fnDetails.fnParams + aStr.slice(fnDetails.endIndex); } // Recurse if (res.indexOf('call') === -1 && res.indexOf('run') === -1) { return res; } return parseRulesAndFunctions(res, fnDetails.paramEnd).next(); } 

产生请求(fnDetails.url)时返回Promise而不是string。

如果recursion调用生成器函数,则必须从生成器中生成所有结果。 你可以使用yield*来做到这一点。 只返回一个.next()结果不会。

您正在寻找

 return yield* parseRulesAndFunctions(res, fnDetails.paramEnd); 

当然,你可以很容易地将你的尾recursion函数转换成一个循环。