??? return n1 + n2;

}

const result = sum(10, 20);

// 異步

function getMsg() {

??? setTimeout(function () {

??????? return { msg: "Hello Node.js" };

??? }, 2000);

}

const msg = getMsg();

2、代碼執行順序

司步API從上到下依次執行,前面代碼會阻塞后面代碼的執行;異步API不會等待API執行完成后再向下執行代碼。

for (var i = 0; i < 100000; i++) {

??? console.log(i);

}

console.log("for循環后面的代碼");

異步API不會等待API執行完成后再向下執行代碼

console.log("代碼開始執行");

setTimeout(() => {

??? console.log("2秒后執行的代碼");

}, 2000);

setTimeout(() => {

??? console.log('"0秒"后執行的代碼');

}, 0);

console.log("代碼結束執行");

3、回調函數

自己定義的函數讓別人去調用

// getData函數定義

function getData(callback) {}

// getData函數調用

getData(() => {});

4、使用回調函數獲取異步API執行結果

function getMsg(callback) {

??? setTimeout(function () {

??????? callback({ msg: "Hello Node.js" });

??? }, 2000);

}

getMsg(function (msg) {

??? console.log(msg);

});

5、代碼執行順序分析

console.log("代碼開始執行");

setTimeout(() => {

??? console.log("2秒后執行的代碼");

}, 2000);

setTimeout(() => {

??? console.log('"0秒"后執行的代碼');

}, 0);

console.log("代碼結束執行");

6、Node.js中的異步API

fs.readFile("./demo.txt", (err, result) => {});

var server = http.createServer();

server.on("request", (req, res) => {});

二者在實際應用上,根據業務場景的不同,有著以下區別。

1.長時間運行操作場景中,異步API更占優勢。

以需要長時間運行的業務為例,假設開發者正在構建一個使用機器學習來檢測博客帖子情緒的 SaaS,開發者需要提交一個指向該博客帖子的鏈接,該服務將分析該帖子的情緒并將其返回。這個操作可能需要幾秒甚至一分鐘才能完成。可是這個時間太慢了,對于用戶來說,如果不能在 5 秒內做出響應,就會失去耐心。因此,需要一個理解長時間運行操作概念的 API。

若使用同步 API設計,它的操作流程會是

“curl?-X?POST?-H?“Content-Type:?application/json”?-d?‘{“url”:?“https://www.wundergraph.com/blog/long_running_operations”}’?http://localhost:3000/api/v1/analyze_sentiment”

最終的響應結果是

“{?“status”:?“success”,??“data”:?{???“url”:?“https://www.wundergraph.com/blog/long_running_oerations”,????“sentiment”:?“positive”??}}”

此操作可能需要很長時間才能完成,并且用戶可能會取消它。

若使用異步 REST API設計,開發者需要返回具有唯一標識符的響應,以便客戶端可以輪詢服務器以獲取結果。設計此類 API 的正確方法是返回 202 Accepted 狀態代碼。

因此開發者最終獲得的響應效果將是一個帶有狀態代碼 202 和響應。此刻,客戶端可以使用以下命令來獲取作業的狀態:

curl?http://localhost:3000/api/v1/analyze_sentiment/1/status

意味著?API 的調用者可以及時獲取作業的當前狀態或取消它。

隨著平臺功能的發展,用戶群體對精準度更高的同步API需求同步增長。

以 Unity 首選的資源管理工具Addressable Asset System為例,它雖然可以將資源的引用和打包分開處理,加快運行模式下和運行版本的項目迭代。但是現有的許多Unity 用戶開發的游戲不會有遠程下載內容的需要,意味著異步行為在其它項目中反而會變成約束。因此,開發者需要新添功能更專一、準確化程度更高的同步 API。

假設開發者新添加了Synchronous Addressables API,在 1.17.4 版的 Addressables 包中可以使用,兼容 Unity 2021.1、Unity 2020 LTS 和 Unity 2019 LTS。在有了新的 API 后,項目不必調整為異步加載就能用上 Addressables?了。同步行為在函數中以 AsyncOperationHandle 的 WaitForCompletion 方法表示,該方法會返回同步運算的結果。

開發者可以先聲明 Addressables.LoadAssetAsync<GameObject>(“MyPrefab”),返回 GameObject 運算的開關 AsyncOperationHandle<GameObject>。這時再聲明 WaitForCompletion 會讓系統阻攔代碼執行,直到資源加載完成。在加載完成后,WaitForCompletion 便會返回代碼請求的 GameObject。完成對異步和同步的同步運算。

事實上,在大部分實例中,同步加載的性能可比肩異步加載。而且同步加載的準確性更高。

在物聯網應用中,二者的使用都有自己的優勢

從聯網汽車和恒溫器到智能交通信號燈和農場的作物管理,物聯網被用在各種部署中。物聯網設備通常會生成大量實時數據,并使用流技術來保存這些數據。但這并不適用于向最終用戶提供數據,因為物聯網設備本身缺乏一種有效、安全的方法來將其數據公開給想要查看或分析數據的用戶。幸運的是,這種情況正在改變。隨著事件原生 API 和API 網關的出現,可以根據數據消費者的需求,同步和異步地從 IoT 設備(以及各種其他資源)公開數據。

同步 API 是一種通過請求-響應模型公開數據的 API。當數據僅定期更改和/或當數據消費者不需要持續更新的信息流時,這種方法可以根據數據消費者的請求數據進行響應,比如構建一個報告室外溫度的應用程序,同步 API?可以實時報告數據;但是,如果處于數據不斷變化的環境內,異步API 會是更好的選擇,比如流經管道的水量或機器人在工廠車間的位置不斷變化,使用異步 API,流數據可以通過 API 公開。這樣,數據消費者可以使用 API 調用訪問持續更新的數據流,而無需直接連接到后端數據流。

參考鏈接:

https://mp.weixin.qq.com/s/bvoIptd7YwU45icqvoqokg

https://mp.weixin.qq.com/s/9c11pJ5d1nbE2vmGvCDwmQ

https://blog.csdn.net/cz_00001/article/details/132837290

https://mp.weixin.qq.com/s/OjmnK8LST7IavP5-9ByZZA

https://mp.weixin.qq.com/s/kw3huYO3XXtx30RCfwheAg

上一篇:

JSON API vs XML API:數據格式之爭

下一篇:

2024年Python API框架:8個最佳開源選擇
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費