Javascript 如何模拟api调用函数中的延迟?
我有一个用api post请求更新用户的函数。后端尚未完成。因此,该函数将始终返回一个错误。为了测试加载和错误状态,我想在返回结果之前临时添加一个假延迟。如何做到这一点?以下是函数:Javascript 如何模拟api调用函数中的延迟?,javascript,asynchronous,settimeout,Javascript,Asynchronous,Settimeout,我有一个用api post请求更新用户的函数。后端尚未完成。因此,该函数将始终返回一个错误。为了测试加载和错误状态,我想在返回结果之前临时添加一个假延迟。如何做到这一点?以下是函数: const updateProfile=async(form)=>{ 试一试{ const res=wait api.post(“/updateprofile”,form); 返回res; }捕捉(错误){ 抛出新错误(“Error.unknown”); } };您可以创建一个简单的睡眠功能 const slee
const updateProfile=async(form)=>{
试一试{
const res=wait api.post(“/updateprofile”,form);
返回res;
}捕捉(错误){
抛出新错误(“Error.unknown”);
}
};代码>您可以创建一个简单的睡眠功能
const sleep = ms => new Promise(
resolve => setTimeout(resolve, ms));
然后使用like
await sleep(2000);
您可以创建一个简单的睡眠功能
const sleep = ms => new Promise(
resolve => setTimeout(resolve, ms));
然后使用like
await sleep(2000);
您可以同时返回一个新承诺(直到后端准备就绪):
const updateProfile=async()=>{
试一试{
//const res=wait api.post(“/updateprofile”,form);
//返回res;
返回新承诺((res,rej)=>{
setTimeout(()=>res('response'),2000)
})
}捕捉(错误){
抛出新错误(“Error.unknown”);
}
};
updateProfile()。然后(console.log)
您可以同时返回一个新承诺(直到后端准备就绪):
const updateProfile=async()=>{
试一试{
//const res=wait api.post(“/updateprofile”,form);
//返回res;
返回新承诺((res,rej)=>{
setTimeout(()=>res('response'),2000)
})
}捕捉(错误){
抛出新错误(“Error.unknown”);
}
};
updateProfile()。然后(console.log)
问题在这里:
setTimeout(()=> fakeCallDone = true, 2000)
它将转到webapi
,然后继续执行下一行代码
[解决方案]
const updateProfile = async (form) => {
try {
var res = api.post("/update-profile", form); // this async code will move on `web api`. When it's done will move on to queue.
await delay(2000); // You mock a delay here
return await res; // Resolve value from `res` promise.
} catch (err) {
throw new Error("error.unknown");
}
};
delay()方法如下所示:
const delay= ms => new Promise(resolve => setTimeout(resolve, ms));
注意:您应该了解有关事件循环的更多详细信息
js的工作原理:调用堆栈、web API、队列、事件循环
Javascript中的异步编程
问题在于:
setTimeout(()=> fakeCallDone = true, 2000)
它将转到webapi
,然后继续执行下一行代码
[解决方案]
const updateProfile = async (form) => {
try {
var res = api.post("/update-profile", form); // this async code will move on `web api`. When it's done will move on to queue.
await delay(2000); // You mock a delay here
return await res; // Resolve value from `res` promise.
} catch (err) {
throw new Error("error.unknown");
}
};
delay()方法如下所示:
const delay= ms => new Promise(resolve => setTimeout(resolve, ms));
注意:您应该了解有关事件循环的更多详细信息
js的工作原理:调用堆栈、web API、队列、事件循环
Javascript中的异步编程
尝试在设置超时之前添加wait
)但是最好、正确的方法是将整个函数包装在一个包含setTimeout的承诺中,然后调用该函数。相关:const updateProfile=async(form)=>{try{let fakeCallDone=false;setTimeout(function(){fakeCallDone=true;},2000);const res=wait api.post(“/updateProfile”,form);fakeCallDone&&res;}catch(err){抛出新错误(“Error.unknown”);};尝试在设置超时之前添加wait
)但是最好、正确的方法是将整个函数包装在一个包含setTimeout的承诺中,然后调用该函数。相关:const updateProfile=async(form)=>{try{let fakeCallDone=false;setTimeout(function(){fakeCallDone=true;},2000);const res=wait api.post(“/updateProfile”,form);fakeCallDone&&res;}catch(err){抛出新错误(“Error.unknown”);};