2016-06-23 4 views
0

안녕하세요 아무것도 약속 여기에 사용되는 방식에 문제가 보인다,이 첫 번째 실행을 위해 작동하지만 나는 다시 시도 할 때 휴식 것으로 보인다가능한 약속 문제는

socket.on('new user', function(data, callback) { 
    return getUsersFromDb() 
    .then(function() { 
     if (users.name.indexOf(data) > -1) { 
      callback(false); 
      reject(err); 
     } 
     else { 
      callback(true); 
      // socket.nickname = data; 
      // people[socket.nickname] = socket; 
      updateNicknames(); 
      var user = new User(); 
      user.name = data; 
      user.save(function(err, data) { 
       if (err) { 
        console.log(err)  
       } 
       else { 
        return getUsersFromDb() 
        .then(function() { 
         updateNicknames() 
        }) 
        .catch(function(e) { 
         console.log("Error", e) 
        }) 
       } 
      }); 
      socket.broadcast.emit('user join', {nick: socket.nickname}); 
     } 
    }) 
    .catch(function(e) { 
     console.log("Error", e) 
    }) 
}); 

숭고한는 다음 색상을 보인다 잘못 사용 된 것처럼 다르게 두 번째 else를 잡습니다.

+0

무엇이'socket' 변수입니까? socket.io 연결입니까? 아니면 평범한 소켓 연결인가? 또한, 왜 당신은'거부 (오류)'라고 부릅니까? 'reject()'는 어디에 정의되어 있습니까? 그리고, 왜'socket.on()'콜백의 두번째 인자가 콜백 그 자체라고 생각합니까? 'updateNicknames()'는 무엇을합니까? 작동하지 않을 때 어떤 디버깅을 했습니까? 어떤 코드 경로가 필요한지 알고 있습니까? 어떤 오류가 발생합니까? 이것은 요소 디버깅을 먼저 수행해야하는 것처럼 들리므로 코드가 잘못된 부분을 정확하게 알려줄 수 있습니다. – jfriend00

+0

코드가 실제로 재구성되어야하며, 무엇을 반환해야합니까? u는 여러 개의 비동기 호출이 있고 약속을 전달해야합니다. –

답변

-1

다음 함수가 약속을 반환한다고 가정합니다!?

getUsersFromDb() 

은 $ .when를 사용하여 jQuery를 약속를 시도 (functionWhichReturnsAPromise()). 다음 ("코드의 나머지 부분")?

+0

먼저이 코드는 서버 측 코드입니다 (따라서 jQuery는 실제로 적절하지 않습니다). 두 번째로,'$ .when()'을 단일 약속으로 사용할 이유가 없습니다. 이미 가지고있는 약속에 대해서'.then()'를 직접 호출 할 수 있습니다. 이것은 OP의 질문에 대한 어떤 종류의 대답도 제공하지 않는 것 같습니다. – jfriend00