JavaScript 如何调用 Web API?

Posted

技术标签:

【中文标题】JavaScript 如何调用 Web API?【英文标题】:How does JavaScript call web APIs? 【发布时间】:2021-01-07 05:51:56 【问题描述】:

据我所知, 当我像 setTimeout 一样调用 Web API 4 次时,javascript 的正常行为:

它应该调用第一个函数然后将其添加到队列中等待调用堆栈为空.. 重复它会对所有其他 api 执行相同的操作.. 所以第二个函数应该等到第一个函数执行然后开始被调用 .. 这意味着 第二个函数应该花费 2 秒或更长时间,然后 第三个函数应该花费 3 秒或更长时间 ...等等。 ..


我错过了什么!?

【问题讨论】:

您正在立即设置所有超时,并且它们都会在 1 秒后解决。使用 setTimeout 在超时完成之前不会阻塞。 下次尝试把代码放在这里而不是截图 【参考方案1】:

注意:由于我无法添加评论,因此我发布了此答案。

const sleep = (timeout) => 
    return new Promise((resolve, reject) => 
        setTimeout(() => 
            // perform some task here
            resolve(true);
        , timeout);
    );
;

async () => 
    // in asynchronous function
    await sleep(1000);
    // do something after code returns
;
// in global scope or synchronous
sleep(1000).then(() => 
    // callback
);

【讨论】:

【参考方案2】:

尝试使用异步等待并等待每个操作完成。

const sleep = (ms) => new Promise(e => setTimeout(e, ms));

const logSeconds = async () => 
  await sleep(1000);
  console.log(new Date().toLocaleTimeString());


const main = async () => 
  await logSeconds();
  await logSeconds();
  await logSeconds();


main()

【讨论】:

【参考方案3】:
var TimeOutOnTimeOut = () => 
   setTimeout(() => 
       console.log("Like this!");
       TimeOutOnTimeOut();
    , 3000);
;
    
TimeOutOnTimeOut();

他们会同时调用,但是你可以在第一个完成后调用下一个。

【讨论】:

以上是关于JavaScript 如何调用 Web API?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)

从javascript传递到web api 2时如何隐藏或保护令牌

原创web端高德地图javascript API的调用

web前端怎么调用api接口

ionic2如何调用百度地图

在没有用户登录屏幕的情况下从Javascript调用安全的REST API