Nodejs 使用不同的参数循环访问相同的 API



我尝试遍历相同的 API 结果,如果 API 结果为 NULL,那么我想使用不同的参数再次循环访问它几次(即 4-5 次(,如果它达到了第 5 次。我想退出循环。我正在尝试的代码如下所示:

var roads = 1000;
var findResult = true;
var loop = 0;
while (findResult) {
result = APIResult(rarray, roads);
if (result !== null) {
findResult = false; // stop the loop
} else if (loop == 5) {
findResult = false; // stop the loop
} else {
roads = roads * 10;
loop++;
}
}
function APIResult(rarray, roads) {
request.post(
env.TEST_URL + 'test/',
{
json: {
//...
roads: roads,
//..
},
},
function(error, response, body) {
if (!error && response.statusCode == 200) {
return JSON.parse(body.rows[0].result);
}
});
}

我什至尝试添加Q承诺但没有奏效,知道该怎么做吗?

您的APIResult函数不返回任何内容。此函数是异步的,因此它应返回 promise 或使用回调。

代码result = APIResult(rarray, roads);设置为result变量undefined值。我认为,用于实现异步JS功能的异步/等待样式将为您工作。

当前最后一个 Node.js 版本是 8.1。它具有对 async/await 的本机支持。有一个示例,如何实现代码:

async function main() {
var roads = 1000;
var findResult = true;
var loop = 0;
while (findResult) {
try {
result = await APIResult(rarray, roads);
} catch (e) {
//APIResult reject promise branch
}
if (result !== null) {
findResult = false; // stop the loop
} else if (loop == 5) {
findResult = false; // stop the loop
} else {
roads = roads * 10;
loop++;
}
}
}
async function APIResult(rarray, roads) {
return new Promise((res, rej) => {
request.post(
env.TEST_URL + 'test/',
{
json: {
//...
roads: roads,
//..
},
},
function(error, response, body) {
if (error) return rej(error);
if (response.statusCode === 200) return res(JSON.parse(body.rows[0].result));
});
});
}
main();

相关内容

  • 没有找到相关文章

最新更新