
[英]How to resolve the second promise if it required the first promise resolved result's element?
[英]How mock promise's result after 300ms if promise was not resolved?
假设我们有一个返回不重要数据的请求。 如果我们的承诺自300毫秒以来仍未解决,我们希望获得模拟响应。
我们也有请求代码(例如)
function getNotImportantData() {
return fetch("url").then((response) => response.json());
}
我们能做什么?
PS:可以使用es6 +
好吧,在这种情况下,我们可以使用标准的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
}
我在这里引用了Promise.race
文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.