搜尋

首頁  >  問答  >  主體

node.js - [nodejs] 为什么文件的 api 有同步的,但是数据库操作几乎都是异步的?

nodejs 里面 fs 模块提供了 readFile 和 readFileSync 同步和异步的 api

而 mysql 库里面的 query 都是同步的,而没有 querySync 之类的方法

数据库的读写和文件的 IO 有什么区别?是做不了还是只是保持异步的风格?

谢谢~

巴扎黑巴扎黑2785 天前470

全部回覆(2)我來回復

  • PHPz

    PHPz2017-04-17 15:30:14

    謝邀,node的那幾個同步介面是為了方便開發者的,是原生提供的。

    而其他幾個資料庫介面是第三方的模組,是其他的作者組織實現的。

    一般情況下建議寫非同步,當然會有各種回呼不優雅啥的,這時候就建議用原生提供的各種同步方法來優化程式碼,實現優雅。

    如: Generator / Promise / Async 等原生方案。

    或是用co等封裝過的主流非同步處理方案

    回覆
    0
  • 迷茫

    迷茫2017-04-17 15:30:14

    實際上沒有什麼流程上的差別了,只是readFile是原生的API,官方提供了這個同步的在呼叫。
    query 是 node-mysql 模組提供的 api ,沒給使用者提供此類方法罷了。

    實際你可以自己實作一個,剛好 node v7+ 可以支援 asyncawait 了。
    類似這樣的:

    querySync(sql, data) {
        return new Promise((resolve, reject) => {
            connection.query(sql, data, (err, result) => {
                if (err) {
                    reject(err);
                    return;
                }
                resolve(result);
            });
        });
    }
    
    async getData(sql, data) {
        const data = await querySync(sql, data)
    }

    回覆
    0
  • 取消回覆