我在下面的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未定义错误。
任何人都可以解释我在这里做错了什么。
答案 0 :(得分:4)
您需要从checkC()
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);
});