假设我们有一个返回不重要数据的请求。如果我们的承诺自300毫秒以来仍未解决,我们希望获得模拟响应。
我们还有请求代码(例如)
function getNotImportantData() {
return fetch("url").then((response) => response.json());
}
我们能做什么?
P.S .:可以使用es6 +
答案 0 :(得分:6)
好吧,在这种情况下,我们可以使用标准的Promise
API。
让我们逐步进行:
const mockPromise = new Promise((resolve) => {
setTimeout(() => {
resolve([]); // any payload, here is empty array for example
}, 300);
});
Promise.race
方法来检测谁解决了第一个问题function getNotImportantData() {
return fetch("url").then((response) => response.json());
}
const mockPromise = new Promise((resolve) => {
setTimeout(() => {
resolve([]); // any payload, here is empty array for example
}, 300);
});
Promise.race([
getNotImportantData(),
mockPromise,
]);
function getNotImportantData() {
return fetch("url").then((response) => response.json());
}
function tryOrMock(promise, mock, timeout) {
const mockPromise = new Promise((resolve) => {
setTimeout(() => {
resolve(mock);
}, timeout);
});
return Promise.race([
promise,
mockPromise,
]);
}
tryOrMock(getNotImportantData(), [], 300)
.then((firstResult) => {
console.log(firstResult);
})
.catch((error) => {
// don't forget to handle exceptions
})
// or async/await syntax
try {
const firstResult = await tryOrMock(getNotImportantData(), [], 300);
} catch (e) {
// handle exceptions here too
}
我将here对Promise.race
文档的引用