2013-09-30 2 views
1

jQuery $ .Deferred/promise 기능을 SharePoint JavaScript API와 함께 사용하고 싶습니다. 다음은 내가 성취하고자하는 목표의 예입니다.

function getCachedSearches() { 
    var dfd = $.Deferred(function() { 
     var list = context 
       .get_web() 
       .get_lists() 
       .getByTitle('CachedSearches'); 

     cached_searches = list.getItems(''); 

     context.load(cached_searches); 

     context.executeQueryAsync(
      function() { 
       dfd.resolve(); 
      }, 
      function (sender, args) { 
       dfd.reject(args.get_message()); 
      } 
     ); 
    }); 
    return dfd.promise(); 
} 

function addCachedSearch(phrase) { 
    var dfd = $.Deferred(function() { 
     var list = context 
       .get_web() 
       .get_lists() 
       .getByTitle('CachedSearches'); 

     var create_item = new SP.ListItemCreationInformation(); 
     var list_item = list.addItem(create_item); 

     list_item.set_item('Title', phrase); 

     list_item.update(); 

     context.load(list_item); 

     context.executeQueryAsync(
      function() { 
       dfd.resolve(); 
      }, 
      function (sender, args) { 
       dfd.reject(args.get_message()); 
      } 
     ); 
    }); 
    return dfd.promise(); 
} 

function doSearch() { 
    addCachedSearch($('#phrase').val()) 
     .then(getCachedSearches()); 
} 

불행히도 위의 코드는 예상대로 작동하지 않습니다. 두 번째 호출은 실행하기 전에 첫 번째 약속이 해결 될 때까지 기다리지 않습니다. 많은 감사

답변

4

나는 문제가 있다고 생각한다. .then()은 함수 참조를 기대하지만 함수를 호출하고 결과 (이 경우 Promise)를 전달하고있다. 대신이 시도하지 : getCachedSearches 더 이상 () 괄호를 가지고

function doSearch() { 
    addCachedSearch($('#phrase').val()) 
     .then(getCachedSearches); 
} 

하는 것으로. 지금 작동하는 것 같다 - 그가 http://jsfiddle.net/UbBz3/

+0

큰 감사 : 그냥 재미로에 대한

, 여기 jsFiddle은 당신이해야 할 노력하고 표시되는 내용의 증류 예제입니다 – keyoke