Dva fetch为何返回的是Promise而不是请求的数据

新手上路,请多包涵

使用dva 的fetch访问网络,已成功返回数据,为何fetch 返回的是promise 而不是请求的数据

import fetch from 'dva/fetch';

function parseJSON(response) {
  return response.json();
}

function checkStatus(response) {
  if (response.status >= 200 && response.status < 300) {
    return response;
  }

  const error = new Error(response.statusText);
  error.response = response;
  throw error;
}

/**
 * Requests a URL, returning a promise.
 *
 * @param  {string} url       The URL we want to request
 * @param  {object} [options] The options we want to pass to "fetch"
 * @return {object}           An object containing either "data" or "err"
 */
export default function request(url, options) {
  return fetch(url, options)
    .then(checkStatus)
    .then(parseJSON)
    .then(data => ({ data }))
    .catch(err => ({ err }));
}

请求 此处data为一个Promise

effects: {
    *login({payload }, { call, put }) {  // eslint-disable-line
      const {data} = yield call(login,payload);
      if(data.success){
        routerRedux.push('./users')
      }
    },
  },

service 被model调用

export function login(data)
{
  let _data = fetch(url,data);
  console.log(_data);
  return _data;
}

网络数据

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 7.2k
3 个回答

我调用的时候取到的就是返回的数据

service 中 login 是一个普通方法,方法执行完之后立即返回一个Promise,也就是你调用fetch

effects 中 login 是生成器方法,通过yeild拿到最终promise中值,也就是最后一个then中封装的data对象

没毛病呀~
还需要修炼~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题