属性。然后未定义错误

时间:2016-07-10 18:44:44

标签: javascript es6-promise

我在下面的checkB函数中一直收到.then未定义的错误。

var dataModel={ Base64file:base6
               Filename:filename   }
$.ajax({
    type: "POST",
    dataType: "json",
    url: baseUrl + 'api/data/Details',
    data: dataModel,
    success: function (data) {
        alert(data);

    },
    error: function (error) {
        jsonValue = jQuery.parseJSON(error.responseText);
    }

  //WEBAPI Controller where i am passing ajax data
   public IHTTPActionResult Details(Details dataModel)
    {
       string Path="";
        string sPath1 =System.Web.Hosting.HostingEnvironment.MapPath("http://xxxxx.com/Folder"); 
       }

我可以调用checkC并获取json响应。

export function checkB(accountId) {
    return new Promise((resolve, reject) => {
      const myRepo = new myRepo();
      myRepo.checkC(accountId).then( results => {
        return resolve(results));
      });
    });
}

我有一个调用CheckB的初始函数checkA() - 我试图同步获取CheckA中的结果但​​是仍然遇到来自CheckB的.then未定义错误。

任何人都可以解释我在这里做错了什么。

1 个答案:

答案 0 :(得分:4)

您需要从checkC()

返回Promise
checkC(){
  const fetchApi = new FetchApi();
  const url = `${config.routes.base}/mypath/5`;
  return fetchApi.get(url)
    .then(results => results.json());
    .catch(console.log);
}

此外,由于results.json()是一个返回结果的承诺,因此您无需执行.then(json => {return json;});事。

而且,更一般地说,如果你需要对promise的结果做一些事情,而promise本身就是另一个promise的结果,你可以在不需要嵌套代码的情况下链接它们。

你可以像这样编写你的第二个例子(它没用,我编写的第一个代码工作得很好,只是为了一个例子):

const fetchApi = new FetchApi();
const url = `${config.routes.base}/mypath/5`;
fetchApi.get(url).then(results => {
  return results.json();
})
.then(json => {
  return json;
}).catch(err => {
  console.log(err);
});