gpt4 book ai didi

javascript - 调用工厂定义的方法返回未定义的值/ promise

转载 作者:行者123 更新时间:2023-11-29 17:51:33 27 4
gpt4 key购买 nike

我在 Angular 中有一个错综复杂的(不是我的代码)工厂调用,当使用时,它不会返回 then 属性或任何可用于运行 successCallback 方法的东西(错误本身是 TypeError: Cannot读取未定义的属性 'then')。我不确定可能是什么原因,但调用的许多独特组件可能是原因,例如对 Web 服务的多次嵌套 $http.post 调用。

    updateDocument: function(documentId,  newFileData, appointmentFileName = null, appointmentCategory = null, appointmentId = null) {
//Get Existing Document Details (including Revision)
//document.
documentsService.documentsFactory.getDocumentRecordById(documentId).then(
function successCallback(response) {
console.debug("Response", response);

var NextRevision = parseInt(response.data.revision) + 1;

if ((appointmentCategory === null) || (appointmentCategory === undefined)) {
appointmentCategory = response.data.category_id;
}

if ((appointmentId === null) || (appointmentId === undefined)) {
var ErrorObj = {
status: 10,
message: 'Appointment ID not defined.'
};
return ErrorObj;
}

if ((appointmentFileName === null) || (appointmentFileName === undefined)) {
appointmentFileName = response.data.filename;
}

if ((newFileData === null) || (newFileData === undefined)) {
var ErrorObj = {
status: 11,
message: 'File Data not defined.'
};
return ErrorObj;
}

var action = 'set_document_revision';
var endpoint = cfg.url;
var sessionId = systemService.sessionService.getSessionId();

var DocRevObj = {
session: sessionId,
document_revision: {
id: documentId,
file: newFileData,
filename: appointmentFileName,
revision: NextRevision
}
};

var DocNodeObj = {
session: sessionId,
module: "Documents",
name_value_list: [{
name: 'document_name',
value: appointmentFileName
}, {
name: 'category_id',
value: appointmentCategory
}, {
name: 'id',
value: documentId
}]
};

var RevisionRequestParams = {
method: action,
input_type: "JSON",
response_type: "JSON",
rest_data: DocRevObj
};

var NodeRequestParams = {
method: "set_entry",
input_type: "JSON",
response_type: "JSON",
rest_data: DocNodeObj
}

var headers = {
"Content-Type": "application/json"
};

return $http.post(endpoint, RevisionRequestParams, headers).then(
function successCallback(response2) {
console.debug("Successfully Replaced File", response2);

//Re-adjust the File Entry to match new changes
//(make a call to set_entry)
return $http.post(endpoint, NodeRequestParams, headers).then(
function successCallback(response3) {
console.debug("Successfully Updated File", response3);
return response3;
},
function errorCallback(response3) {
console.debug("Error", response3);
return response3
}
);

return response2;
},
function errorCallback(response2) {
console.debug("Error", response2);
return response2;
}
);
console.debug("Success", response);
return response;
}, function errorCallback(response) {
console.debug("Error", response);
return response;
}
);
}

引用方法调用(在 Controller 内,在单击事件时触发)

appointmentsService.appointmentsFactory.updateDocument(CurrentDocumentId, result, NewFileName, NewDocumentType, CurrentAppointmentID).then(
function successCallback(response) {
//Success Callback Logic
},
function errorCallback(response) {

});

事实上,在 Promises 返回任何内容之前,对 updateDocument 的调用是否有可能得到返回?如果是这样,我有哪些解决方案?

最佳答案

您的 updateDocument 函数不返回任何内容。在 getDocumentRecordById 调用之前添加 return。

var updateDocument = function(documentId, newFileData, appointmentFileName = null, appointmentCategory = null, appointmentId = null) {
//Get Existing Document Details (including Revision)
//document.
return documentsService.documentsFactory.getDocumentRecordById(documentId).then(
...

关于javascript - 调用工厂定义的方法返回未定义的值/ promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43148084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com