我有一个fetch-api POST要求:
fetch-api
POST
fetch(url, { method: 'POST', body: formData, credentials: 'include' })
我想知道这个的默认超时是多少?我们如何将其设置为特定值,例如 3 秒或无限秒?
正如评论中所指出的,即使在承诺被解决/拒绝后,原始答案中的代码也会继续运行计时器。
下面的代码解决了这个问题。
function timeout(ms, promise) { return new Promise((resolve, reject) => { const timer = setTimeout(() => { reject(new Error('TIMEOUT')) }, ms) promise .then(value => { clearTimeout(timer) resolve(value) }) .catch(reason => { clearTimeout(timer) reject(reason) }) }) }
它没有指定的默认值;该规范根本没有讨论超时。
通常,您可以为 Promise 实现自己的超时包装器:
// Rough implementation. Untested. function timeout(ms, promise) { return new Promise(function(resolve, reject) { setTimeout(function() { reject(new Error("timeout")) }, ms) promise.then(resolve, reject) }) } timeout(1000, fetch('/hello')).then(function(response) { // process response }).catch(function(error) { // might be a timeout error })
如https://github.com/github/fetch/issues/175中所述 评论https://github.com/mislav