什么是“异步*”?
What is `async*`?
This example on MDN 说明 Symbol.asyncIterator
。
const myAsyncIterable = {
async* [Symbol.asyncIterator]() {
yield "hello";
yield "async";
yield "iteration!";
}
};
(async () => {
for await (const x of myAsyncIterable) {
console.log(x);
// expected output:
// "hello"
// "async"
// "iteration!"
}
})();
我的问题是 async*
在代码中是什么意思?
给出的示例使用 shorthand 在对象文字或 类 中创建方法。考虑以下对象定义:
const iHaveAMethod = {
myMethod() {
return "cool!";
}
};
console.log(iHaveAMethod.myMethod()); // cool!
它还使用括号语法来定义使用符号的方法。
const iAmASymbol = Symbol("neat");
const iHaveAMethod = {
[iAmASymbol]() {
return "cool!";
}
};
console.log(iHaveAMethod[iAmASymbol]()); // cool!
它在作为生成器的对象上创建一个方法(使用 *
语法)。
const iHaveAMethod = {
* myMethod() {
yield "cool!";
}
};
console.log(iHaveAMethod.myMethod().next().value); // cool!
最后,它是一个异步方法,因此标有async
。
const iHaveAMethod = {
async* myMethod() {
yield Promise.resolve("cool!");
}
};
iHaveAMethod.myMethod().next().then(val => console.log(val.value)); // cool!
将它与括号语法结合起来,你会得到 async*
:
const iAmASymbol = Symbol("neat");
const iHaveAMethod = {
async* [iAmASymbol]() {
yield Promise.resolve("cool!");
}
};
iHaveAMethod[iAmASymbol]().next().then(val => console.log(val.value)); // cool!
这解释了 async*
是如何到达那里的。异步迭代器和为什么你想要一个异步生成器是一个完全不同的蜡球。
This example on MDN 说明 Symbol.asyncIterator
。
const myAsyncIterable = {
async* [Symbol.asyncIterator]() {
yield "hello";
yield "async";
yield "iteration!";
}
};
(async () => {
for await (const x of myAsyncIterable) {
console.log(x);
// expected output:
// "hello"
// "async"
// "iteration!"
}
})();
我的问题是 async*
在代码中是什么意思?
给出的示例使用 shorthand 在对象文字或 类 中创建方法。考虑以下对象定义:
const iHaveAMethod = {
myMethod() {
return "cool!";
}
};
console.log(iHaveAMethod.myMethod()); // cool!
它还使用括号语法来定义使用符号的方法。
const iAmASymbol = Symbol("neat");
const iHaveAMethod = {
[iAmASymbol]() {
return "cool!";
}
};
console.log(iHaveAMethod[iAmASymbol]()); // cool!
它在作为生成器的对象上创建一个方法(使用 *
语法)。
const iHaveAMethod = {
* myMethod() {
yield "cool!";
}
};
console.log(iHaveAMethod.myMethod().next().value); // cool!
最后,它是一个异步方法,因此标有async
。
const iHaveAMethod = {
async* myMethod() {
yield Promise.resolve("cool!");
}
};
iHaveAMethod.myMethod().next().then(val => console.log(val.value)); // cool!
将它与括号语法结合起来,你会得到 async*
:
const iAmASymbol = Symbol("neat");
const iHaveAMethod = {
async* [iAmASymbol]() {
yield Promise.resolve("cool!");
}
};
iHaveAMethod[iAmASymbol]().next().then(val => console.log(val.value)); // cool!
这解释了 async*
是如何到达那里的。异步迭代器和为什么你想要一个异步生成器是一个完全不同的蜡球。