跳转到内容
这是一个实验性功能。

Future

Future 类表示 SurrealDB 的 Futures 功能

导入

import { Future } from "@tai-kun/surrealdb/decodeonly-datatypes";
import { Future } from "@tai-kun/surrealdb/encodable-datatypes";
import { Future } from "@tai-kun/surrealdb/standard-datatypes";

.constructor()

创建一个新的 Future 对象。

new Future(source: string);

参数

source

future 块中的值或表达式。

返回值

如果通过 new 调用,Future 将返回其实例。

.block 实例 属性 >=decode-only

future 块中的值或表达式。

.block: number;

.toString() 实例 方法 >=encodable

Future 对象转换为字符串。

.toString(): string;

参数

无。

返回值

返回 future 块中的值或表达式。

示例

import { Future } from "@tai-kun/surrealdb/encodable-datatypes";
const future = new Future(`time::now()`);
console.log(future.toString());
//-> time::now()

.toSurql() 实例 方法 >=encodable

Future 对象转换为可嵌入 SurrealQL 的字符串。与 .toString() 类似,但块用波括号 ({}) 括起来,并用 <future> 进行转换。

.toSurql(): string;

参数

无。

返回值

返回可嵌入 SurrealQL 的 future。

示例

import { Future } from "@tai-kun/surrealdb/encodable-datatypes";
const future = new Future(`time::now()`);
console.log(future.toSurql());
//-> <future>{time::now()}

.surql() 静态 方法 =standard

此方法有助于编写 SurrealQL。可以使用模板字面量来编写 SurrealQL。嵌入到模板字面量中的值将自动转换为 SurrealQL。此外,如果您安装了 SurrealDB 官方扩展 ,则 VSCode 中的模板字面量语法高亮将生效。

.surql(texts: TemplateStringsArray, ...values: unknown[]): string;

参数

texts

构成模板字面量的字符串数组。

values

要嵌入到 texts 各元素之间的值。

返回值

SurrealQL 字符串。

示例

import { Future, Thing } from "@tai-kun/surrealdb/standard-datatypes";
const foo = "foo";
const rid = new Thing("person", "tai-kun");
const future = new Future(Future.surql`
LET $a = ${foo} + ${Future.raw("'-'")};
LET $b = type::string(${rid});
string::concat($a, $b)
`);
console.log(future.toSurql());
//-> <future>{
//-> LET $a = 'foo' + '-';
//-> LET $b = type::string(r'person:⟨tai-kun⟩');
//-> string::concat($a, $b)
//-> }

如果不使用 .surql(),则上面的示例将如下所示:

import { Future, Thing } from "@tai-kun/surrealdb/standard-datatypes";
import { toSurql } from "@tai-kun/surrealdb/utils";
const foo = "foo";
const rid = new Thing("person", "tai-kun");
const future = new Future(/*surql*/ `
LET $a = ${toSurql(foo)} + ${"'-'"};
LET $b = type::string(${rid.toSurql()});
string::concat($a, $b)
`);
console.log(future.toSurql());
//-> <future>{
//-> LET $a = 'foo' + '-';
//-> LET $b = type::string(r'person:⟨tai-kun⟩');
//-> string::concat($a, $b)
//-> }
  • 需要使用 toSurql 辅助函数或 .toSurql() 方法将字符串或对象转换为 SurrealQL。
  • 可以不使用 Future.raw 将字符串嵌入到 SurrealQL 中。

进阶

Future 对象的通用判断

建议使用 isFuture 函数来判断值是否为 Future 对象,而无需依赖预设。此函数不使用 instanceof,因此在验证值的预设未知时非常有用。

import { isFuture } from "@tai-kun/surrealdb";