gpt4 book ai didi

node.js - 如何在递归生成器函数中产生请求?

转载 作者:太空宇宙 更新时间:2023-11-04 00:44:06 27 4
gpt4 key购买 nike

我创建了一个生成器函数,它递归地检查字符串并返回解析的输出。我正在尝试使用 koa-request 在生成器中发出请求,但是它返回未定义。

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();
}

在产生请求时返回 Promise 而不是字符串(fnDetails.url)。

最佳答案

如果递归调用生成器函数,则必须生成生成器的所有结果。您可以使用 yield* 来做到这一点。仅返回单个 .next() 结果是不行的。

您正在寻找

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

当然,您可以轻松地将尾递归函数转换为循环。

关于node.js - 如何在递归生成器函数中产生请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com