我對 JavaScript 比較陌生,并且很難理解為什么這個函式會立即回傳,即使我添加了一個等待。下面的代碼是復制我正在嘗試做的最小示例。當我從 呼叫add_user()時add(),id是undefined因為add_user()立即回傳而不是等待查詢完成。我添加了控制臺日志以驗證這row.id是我期望的值(即 1)。
'use strict';
import sqlite3 from 'sqlite3'
import { open } from 'sqlite';
async function add_user(value) {
await (async () => {
const db = await open({
filename: dbFile,
driver: sqlite3.Database
})
const row = await db.get(`SELECT id FROM Users WHERE name LIKE "${value}"`)
console.log(row.id)
return row.id
})()
}
async function add(req, res) {
var id = await add_value(req.body.value)
console.log(id)
}
uj5u.com熱心網友回復:
我很確定代碼是按照需要異步運行的——只是你沒有從add_user. 舉一個更小的例子:
async function someFn() {
await somePromise;
}
上面,someFn將始終回傳一個決議為 的 Promise undefined,因為沒有回傳任何內容someFn。你遇到了同樣的問題。
改為使用
async function add_user(value) {
const db = await open({
filename: dbFile,
driver: sqlite3.Database
})
const row = await db.get(`SELECT id FROM Users WHERE name LIKE "${value}"`)
console.log(row.id)
return row.id
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/493512.html
標籤:javascript
