这个错误意味着什么 - Uncaught TypeError:已经读过了吗?

tus*_*ath 45 javascript typeerror promise

在Javascript中,何时抛出此错误?

在此输入图像描述

index.js

/**
 * Created by tushar.mathur on 24/12/15.
 */
'use strict'

const _ = require('lodash')
const Rx = require('rx')
const createDataStore = require('./src/createDataStore')

const fetch = x => Rx.Observable.fromPromise(window.fetch(x)) 
const parseJSON = x => Rx.Observable.fromPromise(x.json()) // Line: 11 (Where the exception is thrown)
var create = _.partial(createDataStore, fetch, parseJSON)
module.exports = {
  create,
  // Alias for legacy purposes
  createDataStore: create,
  createFetchStore: create
}
Run Code Online (Sandbox Code Playgroud)

这是本机承诺错误吗?这意味着什么?谷歌显示没有找到结果.

gkk*_*sch 68

我认为这意味着已经通过使用.json().text()等来读取正文......当你运行x.json()时,它会获取响应的主体并将其读入JSON.如果您尝试再次运行x.json(),它将为您提供该错误.所以,你可以只使用一个这些方法一次.所以我在你的代码中假设它正在使用一个Body方法再次读取相同响应的主体.

我认为这就是为什么他们提供这种Body.bodyUsed方法.所以你可以看看它是否已被阅读过.

  • 解决方案,如果你真的需要阅读2次:使用response.clone()https://github.com/whatwg/fetch/issues/196#issuecomment-171935172 (4认同)

Win*_*ers 6

此错误表示您已经多次解决了承诺(在这种情况下,您使用Body.json()).

你可以从我下面的ref我检查响应体方法,你需要一个标志来检查是否已经解决了promise:在这种情况下,你可以使用 Body.bodyUsed

参考:https://developer.mozilla.org/en-US/docs/Web/API/Response

HTH

  • 我也刚刚遇到这个错误。您不需要两次解决承诺,如果不摆弄承诺的内部属性,这应该是不可能的。你只需要调用 .then() 两次即可。据记录,支持调用“.then()”两次。我会看看是否可以总结一个最小的例子。显示此内容的我的代码位于:https://tonicdev.com/hippietrail/57611741f056621300ecd1e2 (2认同)