ReadableStream:from() 靜態方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

注意:此功能在 Web Workers 中可用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

ReadableStream.from() 靜態方法會從提供的可迭代物件或非同步可迭代物件返回一個 ReadableStream

該方法可用於將可迭代物件和非同步可迭代物件封裝為可讀流,包括陣列、集合、Promise 陣列、非同步生成器、ReadableStreams、Node.js readable 流等。

語法

js
ReadableStream.from(anyIterable)

引數

anyIterable

一個 可迭代物件非同步可迭代物件

返回值

一個 ReadableStream

異常

TypeError

如果傳入的引數不是可迭代物件或非同步可迭代物件(未定義 [Symbol.iterator]()[Symbol.asyncIterator]() 方法),則會丟擲此錯誤。如果在迭代過程中,下一步的結果不是物件,或者是一個未解析為物件的 Promise,也會丟擲此錯誤。

示例

將非同步迭代器轉換為 ReadableStream

這個即時示例演示瞭如何將非同步可迭代物件轉換為 ReadableStream,以及之後如何消費此流。

HTML

HTML 由單個 <pre> 元素組成,用於日誌記錄。

html
<pre id="log"></pre>

JavaScript

示例程式碼建立了一個 log() 函式來寫入 HTML 日誌元素。

js
const logElement = document.getElementById("log");
function log(text) {
  logElement.innerText += `${text}\n`;
}

然後,它會檢查靜態方法是否受支援,如果不支援,則記錄結果。

js
if (!ReadableStream.from) {
  log("ReadableStream.from() is not supported");
}

非同步可迭代物件是一個匿名生成器函式,在呼叫三次時會產生 1、2 和 3 的值。將其傳遞給 ReadableStream.from() 來建立 ReadableStream

js
// Define an asynchronous iterator
const asyncIterator = (async function* () {
  yield 1;
  yield 2;
  yield 3;
})();

// Create ReadableStream from iterator
const myReadableStream = ReadableStream.from(asyncIterator);

使用可讀流 演示了消費流的幾種方法。下面的程式碼使用了 for ...await 迴圈,因為這種方法最簡單。迴圈的每次迭代都會記錄來自流的當前塊。

js
consumeStream(myReadableStream);

// Iterate a ReadableStream asynchronously
async function consumeStream(readableStream) {
  for await (const chunk of myReadableStream) {
    // Do something with each chunk
    // Here we just log the values
    log(`chunk: ${chunk}`);
  }
}

結果

消費流的輸出如下(如果支援 ReadableStream.from())。

將 Array 轉換為 ReadableStream

此示例演示瞭如何將 Array 轉換為 ReadableStream

JavaScript

可迭代物件只是一個字串陣列,將其傳遞給 ReadableStream.from() 來建立 ReadableStream

js
// An Array of vegetable names
const vegetables = ["Carrot", "Broccoli", "Tomato", "Spinach"];

// Create ReadableStream from the Array
const myReadableStream = ReadableStream.from(vegetables);

我們使用與上一個示例相同的日誌記錄方法和流消費方法,因此此處不再展示。

結果

輸出如下。

規範

規範
Streams
# rs-from

瀏覽器相容性

另見