素材牛VIP会员
Vue使用Fetch请求接口返回(Uncaught (in promise) Error: )
 霍***跑  分类:JavaScript  人气:1380  回帖:3  发布于6年前 收藏
Uncaught (in promise) Error: SyntaxError: Unexpected end of input
    at Object._callee$ (webpack-internal:///./src/config/fetch.js:89:31)
    at tryCatch (webpack-internal:///./node_modules/regenerator-runtime/runtime.js:62:40)
    at Generator.invoke [as _invoke] (webpack-internal:///./node_modules/regenerator-runtime/runtime.js:296:22)
    at Generator.prototype.(anonymous function) [as throw] (webpack-internal:///./node_modules/regenerator-runtime/runtime.js:114:21)
    at step (webpack-internal:///./node_modules/babel-runtime/helpers/asyncToGenerator.js:17:30)
    at eval (webpack-internal:///./node_modules/babel-runtime/helpers/asyncToGenerator.js:30:13)
    at <anonymous>

import {
    baseUrl
} from './env'

export default async(type = 'POST', url = '', data = {}, method = 'fetch') => {
    type = type.toUpperCase();
    url = baseUrl + url;

    if (type == 'GET') {
        let dataStr = ''; //数据拼接字符串
        Object.keys(data).forEach(key => {
            dataStr += key + '=' + data[key] + '&';
        })

        if (dataStr !== '') {
            dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
            url = url + '?' + dataStr;
        }
    }

    if (window.fetch && method == 'fetch') {
        let requestConfig = {
            credentials: 'include',
            method: type,
            headers: {
                'Accept': 'application/json',
                // 'Content-Type': 'application/json',
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

            },
            mode: "no-cors",
            cache: "force-cache"
        }

        if (type == 'POST') {
            Object.defineProperty(requestConfig, 'body', {
                value: JSON.stringify(data)
            })
        }

        try {
            var response = await fetch(url, requestConfig);
            var responseJson = await response.json();
        } catch (error) {
            throw new Error(error)
        }
        return responseJson
    } else {
        let requestObj;
        if (window.XMLHttpRequest) {
            requestObj = new XMLHttpRequest();
        } else {
            requestObj = new ActiveXObject;
        }

        let sendData = '';
        if (type == 'POST') {
            sendData = JSON.stringify(data);
        }

        requestObj.open(type, url, true);
        requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        requestObj.send(sendData);

        requestObj.onreadystatechange = () => {
            if (requestObj.readyState == 4) {
                if (requestObj.status == 200) {
                    let obj = requestObj.response
                    if (typeof obj !== 'object') {
                        obj = JSON.parse(obj);
                    }
                    return obj
                } else {
                    throw new Error(requestObj)
                }
            }
        }
    }
}

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv4 码徒
se***ng 技术总监 6年前#1

async 里面 先返回一个promise,然后 await 它。

Lv6 码匠
zh***ni 职业无 6年前#2

把export default后面的async去掉或者返回一个Promise对象

Lv1 新人
鬼***5 UI设计师 6年前#3

应该是fetch请求返回的data不是json格式所以报错,如果是是用vue的话,不单要检查一下页面的接口,还要检查一下vuex里面的调的接口是否是返回一个json格式的数据

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取