node async wait无法理解此行为

时间:2017-11-08 14:32:38

标签: node.js

很想知道为什么async / await在下面的情况下不起作用?

你认为我做错了什么。

conn是一个异步函数,async函数是一个可以链接的承诺吗?

const db = require('oracledb');

const conn = async () => {
  return await db.getConnection({user: "my_user",
    password: "my_pass",
    connectString: "dbserver/dbservice"
  });
}
undefined

> conn
[AsyncFunction: conn]

conn.execute('select sysdate from dual').then((result) => {
  console.log(results.row);
});

我收到错误原因?

ypeError: conn.execute is not a function
   at repl:1:6
   at ContextifyScript.Script.runInThisContext (vm.js:50:33)
   at REPLServer.defaultEval (repl.js:240:29)
   at bound (domain.js:301:14)
   at REPLServer.runBound [as eval] (domain.js:314:12)
   at REPLServer.onLine (repl.js:441:10)
   at emitOne (events.js:121:20)
   at REPLServer.emit (events.js:211:7)
   at REPLServer.Interface._onLine (readline.js:282:10)
   at REPLServer.Interface._line (readline.js:631:8)

1 个答案:

答案 0 :(得分:0)

异步功能的结果确实是一种承诺。但是你不能将任何东西链接到一个承诺 - 你可以链接诸如then()catch()等承诺的函数。此外,您需要调用conn(),它将返回一个承诺结果,而不是链接该函数本身。

您应该执行以下操作:

conn()
.then(connection => connection.execute('select sysdate from dual'))
.then(result => console.log(results.row))

注意:我不确定oracledb api从getConnection()传来的是什么我猜它是进一步调用的对象。