【发布时间】:2018-06-14 02:33:03
【问题描述】:
我想在下面的 get 请求之间添加一些超时。我的意思是,流程应该是这样的:timeout, https://example.com/example1, timeout, https://example.com/example2, timeout, https://example.com/example3, timeout 等等(或者没有第一次超时,无论如何)。
以下功能正常工作:
function promiseGetInformationFromMultipleUrls(parts) {
return Promise.all(parts.map(part => {
return request({
'url': `https://example.com/${part}`,
'json': true
}).then(partData => {console.log("Part data was fetched: " + part); return partData.result;})
.catch(err => {console.error("Error during fetching data from part: " + part + ", error code: " + err.statusCode);});
}));
}
parts 在哪里 -> example1, example2, example3....
我正在尝试通过添加计时器来做到这一点:
const timer = ms => new Promise( res => setTimeout(res, ms));
并使用它:
function promiseGetInformationFromMultipleUrls(parts) {
return Promise.all(parts.map(part => {
console.log("wait 1 seconds");
timer(1000).then(_=>console.log("done"));
return request({
'url': `https://example.com/${part}`,
'json': true
}).then(partData => {console.log("Part data was fetched: " + part); return partData.result;})
.catch(err => {console.error("Error during fetching data from part: " + part + ", error code: " + err.statusCode);});
}));
}
但这是错误的流程 -> timeout, timeout, timeout,..., get request1, get request 2, get request 3.
【问题讨论】:
-
“超时”是指“延迟”吗?
-
确实如此。超时、延迟或休眠。
-
Promise.all 是错误的方法。它会立即触发所有内容。你可以使用 reduce Promise 数组或使用 await。
-
是的,它是一次性的。嗯,谢谢,我试试改成promise.reduce。
标签: javascript node.js get promise request