不能在承诺

读取属性“然后”未定义我对这个方法上面的错误:不能在承诺

function addContentType(listItem){ 

var promise = getContentTypeOfCurrentItem(listItem.ID.toString());

promise.then(function(cname){

listItem['Document Type'] = cname; //we add the doc type to each listItem, not only the last one

});

return promise;

}

整个代码是在这里:

function GetRelatedBillingDocumentsFromList(selectProperties, currentBillCyclePath, clientCode, jobCodes, engagementCode, enhanceFunctions) { 

$log.info("Retrieving related billing documents for bill cycle with name [" + currentBillCyclePath + "]");

var deferred = $q.defer();

var webUrl = _spPageContextInfo.webAbsoluteUrl;

var viewFields = spService.ConvertSelectPropertiesToViewFields(selectProperties);

// query must return the documents for the same client but in other bill cycles not the current one

var camlQuery = '<View Scope="RecursiveAll">' + viewFields +

'<Query>' +

'<Where>' +

'<And>' +

'<Eq>' +

'<FieldRef Name="ClientCode" />' +

'<Value Type="Text">'+ clientCode + '</Value>' +

'</Eq>' +

'<Neq>' +

'<FieldRef Name="ContentType" />' +

'<Value Type="Computed">Bill Cycle</Value>' +

'</Neq>' +

'</And>' +

'</Where>' +

'</Query>' +

'</View>';

var billCyclesListId = "{c23bbae4-34f7-494c-8f67-acece3ba60da}";

spService.GetListItems(billCyclesListId, camlQuery, selectProperties)

.then(function(listItems) {

var listItemsWithValues = [];

if(listItems) {

var enumerator = listItems.getEnumerator();

var promises = [];

while (enumerator.moveNext()) {

var listItem = enumerator.get_current();

var listItemValues = [];

selectProperties

.forEach(function(propertyName) {

var value = listItem.get_item(propertyName);

if(propertyName === "PwC_JobCodesMulti"){

jobvalue = "";

value.forEach(function(jobvalues){

jobvalue+= jobvalues.get_lookupValue() +";";

})

listItemValues[propertyName] = jobvalue;

}else{

listItemValues[propertyName] = value;

}

});

listItemsWithValues.push(listItemValues);

}

var promises = listItemsWithValues.map(addContentType);

Promise.all(promises).then(youCanUseTheData);

function youCanUseTheData(){

/*

At this point, each listItem holds the 'Document Type' info

*/

listItemsWithValues.forEach(function(listItem) {

var fileDirRef = listItem["FileRef"];

var id = listItem["ID"];

var title = listItem["Title"];

var serverUrl = _spPageContextInfo.webAbsoluteUrl.replace(_spPageContextInfo.webServerRelativeUrl,"");

var dispFormUrl = serverUrl + "/sites/billing/_layouts/15/DocSetHome.aspx?id="+fileDirRef;

//listItem["FileRef"] = dispFormUrl;

//listItem["Bill Cycle"] = dispFormUrl;

var parentLink = listItem["FileRef"];

arrayofstrings = parentLink.split("/");

var billCycleFolderName = arrayofstrings[arrayofstrings.length-2];

arrayofstrings.pop();

var hyperLink = '<a href="' + arrayofstrings.join('/') + '">' + billCycleFolderName + '</a>';

listItem["Bill Cycle"] = hyperLink;

});

}

}

var enhancedListItemValues = spService.SpSearchQuery.EnhanceSearchResults(listItemsWithValues, enhanceFunctions);

deferred.resolve(listItemsWithValues);

})

.catch (function (message) {

deferred.reject();

});

return deferred.promise;

}

function addContentType(listItem){

var promise = getContentTypeOfCurrentItem(listItem.ID.toString());

promise.then(function(cname){

listItem['Document Type'] = cname; //we add the doc type to each listItem, not only the last one

});

return promise;

}

function getContentTypeOfCurrentItem(id) {

var clientContext = new SP.ClientContext.get_current();

var oList = clientContext.get_web().get_lists().getByTitle("Bill Cycles");

listItem = oList.getItemById(id);

clientContext.load(listItem);

listContentTypes = oList.get_contentTypes();

clientContext.load(listContentTypes);

clientContext.executeQueryAsync(

function() {

$log.info("Successfully retrieved getContentTypeOfCurrentItemt");

var ctid = listItem.get_item("ContentTypeId").toString();

var ct_enumerator = listContentTypes.getEnumerator();

while (ct_enumerator.moveNext()) {

var ct = ct_enumerator.get_current();

if (ct.get_id().toString() == ctid) {

var contentTypeName = ct.get_name();

}

}

return Promise.resolve(contentTypeName);

},

function(error, errorInfo) {

$log.warn("Retrieving getContentTypeOfCurrentItem failed");

deferred.reject(errorInfo);

}

);

}

不知道到底是什么我失踪

更新1:

我更改了代码为Niels回复tere,但后来我得到以下错误:

Uncaught Error: The property or field has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested. 

如果我做分析的变化,即改变了方法的唯一事情就是返回新希望,其余的是相同的,这是以前的工作。我没有像尼尔斯那样做所有的改变,只需要不费力气就可以完成这项工作。 :)

function GetRelatedBillingDocumentsFromList(selectProperties, currentBillCyclePath, clientCode, jobCodes, engagementCode, enhanceFunctions) { 

$log.info("Retrieving related billing documents for bill cycle with name [" + currentBillCyclePath + "]");

var deferred = $q.defer();

var webUrl = _spPageContextInfo.webAbsoluteUrl;

var viewFields = spService.ConvertSelectPropertiesToViewFields(selectProperties);

// query must return the documents for the same client but in other bill cycles not the current one

var camlQuery = '<View Scope="RecursiveAll">' + viewFields +

'<Query>' +

'<Where>' +

'<And>' +

'<Eq>' +

'<FieldRef Name="ClientCode" />' +

'<Value Type="Text">'+ clientCode + '</Value>' +

'</Eq>' +

'<Neq>' +

'<FieldRef Name="ContentType" />' +

'<Value Type="Computed">Bill Cycle</Value>' +

'</Neq>' +

'</And>' +

'</Where>' +

'</Query>' +

'</View>';

var billCyclesListId = "{c23bbae4-34f7-494c-8f67-acece3ba60da}";

spService.GetListItems(billCyclesListId, camlQuery, selectProperties)

.then(function(listItems) {

var listItemsWithValues = [];

if(listItems) {

var enumerator = listItems.getEnumerator();

var promises = [];

while (enumerator.moveNext()) {

var listItem = enumerator.get_current();

var listItemValues = [];

selectProperties

.forEach(function(propertyName) {

var value = listItem.get_item(propertyName);

if(propertyName === "PwC_JobCodesMulti"){

jobvalue = "";

value.forEach(function(jobvalues){

jobvalue+= jobvalues.get_lookupValue() +";";

})

listItemValues[propertyName] = jobvalue;

}else{

listItemValues[propertyName] = value;

}

});

listItemsWithValues.push(listItemValues);

}

var promises = listItemsWithValues.map(addContentType);

Promise.all(promises).then(youCanUseTheData);

function youCanUseTheData(){

/*

At this point, each listItem holds the 'Document Type' info

*/

listItemsWithValues.forEach(function(listItem) {

var fileDirRef = listItem["FileRef"];

var id = listItem["ID"];

var title = listItem["Title"];

var serverUrl = _spPageContextInfo.webAbsoluteUrl.replace(_spPageContextInfo.webServerRelativeUrl,"");

var dispFormUrl = serverUrl + "/sites/billing/_layouts/15/DocSetHome.aspx?id="+fileDirRef;

//listItem["FileRef"] = dispFormUrl;

//listItem["Bill Cycle"] = dispFormUrl;

var parentLink = listItem["FileRef"];

arrayofstrings = parentLink.split("/");

var billCycleFolderName = arrayofstrings[arrayofstrings.length-2];

arrayofstrings.pop();

var hyperLink = '<a href="' + arrayofstrings.join('/') + '">' + billCycleFolderName + '</a>';

listItem["Bill Cycle"] = hyperLink;

});

}

}

var enhancedListItemValues = spService.SpSearchQuery.EnhanceSearchResults(listItemsWithValues, enhanceFunctions);

deferred.resolve(listItemsWithValues);

})

.catch (function (message) {

deferred.reject();

});

return deferred.promise;

}

function addContentType(listItem){

return getContentTypeOfCurrentItem(listItem.ID.toString()).then(function(cname){

listItem['Document Type'] = cname; //we add the doc type to each listItem, not only the last one

});

}

function getContentTypeOfCurrentItem(id) {

return new Promise(function (resolve, reject) {

var clientContext = new SP.ClientContext.get_current();

var oList = clientContext.get_web().get_lists().getByTitle("Bill Cycles");

listItem = oList.getItemById(id);

clientContext.load(listItem);

listContentTypes = oList.get_contentTypes();

clientContext.load(listContentTypes);

clientContext.executeQueryAsync(

function() {

$log.info("Successfully retrieved getContentTypeOfCurrentItemt");

var ctid = listItem.get_item("ContentTypeId").toString();

var ct_enumerator = listContentTypes.getEnumerator();

while (ct_enumerator.moveNext()) {

var ct = ct_enumerator.get_current();

if (ct.get_id().toString() == ctid) {

var contentTypeName = ct.get_name();

}

}

resolve(contentTypeName);

},

function(error, errorInfo) {

$log.warn("Retrieving getContentTypeOfCurrentItem failed");

reject(errorInfo);

}

);

});

}

回答:

getContentTypeOfCurrentItem应返回的承诺。假设clientContext.executeQueryAsync不返回一个承诺,因为它使用的处理程序:

function getContentTypeOfCurrentItem(id) { 

return new Promise(function (resolve, reject) {

var clientContext = new SP.ClientContext.get_current();

var oList = clientContext.get_web().get_lists().getByTitle("Bill

Cycles");

listItem = oList.getItemById(id);

clientContext.load(listItem);

listContentTypes = oList.get_contentTypes();

clientContext.load(listContentTypes);

clientContext.executeQueryAsync(

function() {

$log.info("Successfully retrieved

getContentTypeOfCurrentItemt");

var ctid = listItem.get_item("ContentTypeId").toString();

var ct_enumerator = listContentTypes.getEnumerator();

while (ct_enumerator.moveNext()) {

var ct = ct_enumerator.get_current();

if (ct.get_id().toString() == ctid) {

var contentTypeName = ct.get_name();

}

}

resolve(contentTypeName);

},

function(error, errorInfo) {

$log.warn("Retrieving getContentTypeOfCurrentItem failed");

reject(errorInfo);

}

);

});

}

addContentType可以更容易,以及:

function addContentType(listItem){ 

return getContentTypeOfCurrentItem(listItem.ID.toString()).then(function(cname) {

listItem['Document Type'] = cname; //we add the doc type to each listItem, not only the last one

}).catch(function(error) {

$log.warn("Server error");

});

}

回答:

getContentTypeOfCurrentItem函数不返回任何内容。只是修改它来回报您的承诺(当然,假设clientContext.executeQueryAsync返回一个承诺):

function getContentTypeOfCurrentItem(id) { 

var clientContext = new SP.ClientContext.get_current();

var oList = clientContext.get_web().get_lists().getByTitle("Bill Cycles");

listItem = oList.getItemById(id);

clientContext.load(listItem);

listContentTypes = oList.get_contentTypes();

clientContext.load(listContentTypes);

return clientContext.executeQueryAsync(

function() {

$log.info("Successfully retrieved getContentTypeOfCurrentItemt");

var ctid = listItem.get_item("ContentTypeId").toString();

var ct_enumerator = listContentTypes.getEnumerator();

while (ct_enumerator.moveNext()) {

var ct = ct_enumerator.get_current();

if (ct.get_id().toString() == ctid) {

var contentTypeName = ct.get_name();

}

}

return Promise.resolve(contentTypeName);

},

function(error, errorInfo) {

$log.warn("Retrieving getContentTypeOfCurrentItem failed");

deferred.reject(errorInfo);

}

);

}

以上是 不能在承诺 的全部内容, 来源链接: utcz.com/qa/261706.html

回到顶部