Javascript 如何模拟api调用函数中的延迟?

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

我有一个用api post请求更新用户的函数。后端尚未完成。因此,该函数将始终返回一个错误。为了测试加载和错误状态,我想在返回结果之前临时添加一个假延迟。如何做到这一点?以下是函数:

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”);};