Как создать ReadableStream в Microsoft Edge? - PullRequest
0 голосов
/ 22 марта 2019

Обе MDN , caniuse.com и собственная * Microsoft Edge "Статус платформы" заявляют, что Microsoft Edge поддерживает ReadableStream, так как номер сборки 16299+ (выпущено 26.09.2017).

Однако, когда я пытаюсь создать ReadableStream в последней версии Edge (Microsoft Edge 44.17763.1.0, Microsoft EdgeHTML 18.17763), я получаю сообщение об ошибке Function expected.

И

new ReadableStream()

и

new ReadableStream({
  start: function(controller) {},
  pull: function(controller) {},
  cancel: function() {}
})

выдает ошибку Function expected. Пропуск new также не работает.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

В соответствии с примером ReadableSream doc я воспроизвожу проблему на моем Edge 44, но она хорошо работает на Edge 42. Итак, я полагаю, что проблема связана с Edge 44, и в качестве обходного пути я предлагаюВы можете попробовать понизить версию Edge до 42 версии.И я постараюсь сообщить об этой проблеме в Edge Platform.

0 голосов
/ 25 марта 2019

Вы можете попробовать использовать следующий код для чтения данных в Edge:

function pump(reader, context) {
    return reader.read().then(function (result) {
        if (result.done) {
            console.log('ReadableStreamReader: complete! Received ' + context.receivedLength);
        } else {
            var chunk = result.value;
            console.log('ReadableStreamReader: Partial chunk, chunkSize = ' + chunk.byteLength);

            context.receivedLength += chunk.byteLength;
            return pump(reader, context);
        }
    }).catch(function (e) {
        throw e;
    });
}

function fetchVideo() {
    var url = 'xxxxxxxx';

    var headers = new Headers();
    var param = {
        method: 'GET',
        headers: headers,
        mode: 'cors',
        cache: 'default'
    };

    var context = {
        receivedLength: 0
    };

    fetch(url, param).then(function (res) {
        console.log('Content-Length: ' + res.headers.get('Content-Length'));
        return pump(res.body.getReader(), context);
    }).catch(function (e) {
        throw e;
    });
}
...