我尝试在失败后重试请求。但是,我想延迟请求。我无法使setTimeout工作,因为我的函数测试了返回的json(并且是递归的),并且setTimeout不返回回调的返回值。function makeRequest(req, nextjson, attempts){ // I'm using a different method here get({url: "http://xyz.com", json: nextjson}, function(err, json2){ if(err===200){ return json2 } else { // json2 might be bad, so pass through nextjson if(attempts < 5){ return makeRequest(req, nextjson, attempts+1) } else { // pass back the bad json if we've exhausted tries return json2 } } })}我想延迟递归调用的执行。另外,这段代码让我有些尴尬。方式势在必行。如果您有办法清理它,我也将不胜感激 最佳答案 要从setTimout函数返回值,必须重写函数以利用回调:function makeRequest(req, nextjson, attempts, callback) { // I'm using a different method here get({ url: "http://xyz.com", json: nextjson }, function (err, json2) { if (err === 200 || attempts === 5) { callback(json2); } else { setTimeout(function () { makeRequest(req, nextjson, attempts + 1, callback); }, 1000); } });}并这样称呼它:makeRequest(requestStuff, jsonStuff, 0, function(result){ // do stuff with result});我应该补充一点,您的get函数是一个异步函数(通过传入的回调可以明显看出),因此按您的观点,您的makeRequest函数将永远不会返回任何内容,因为get请求仅在函数已经执行。您必须使用回调来访问异步函数返回的值。
07-24 09:43