2016-06-23 18 views
0

がHi何も約束はここで使用されている方法と違って見えるん、これは最初の実行のために動作しますが、その後私は再びしようとすると、壊れているようだ可能なプロミス問題が

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) 
    }) 
}); 

サブライムは、色のようですし、誤って使用されたかのように2番目のelseを別の方法でキャッチする

+0

'socket'変数とは何ですか?それはsocket.io接続ですか?あるいは普通のソケット接続ですか?また、なぜあなたは 'reject(err)'を呼びますか? 'reject()'はどこに定義されていますか?そして、なぜ 'socket.on()'コールバックの第2引数がコールバックであると思いますか? 'updateNicknames()'は何をしますか?動作しないときに行ったデバッグは何ですか?それがどのようなコードのパスを知っていますか?どのようなエラーが出ますか?これは、要素のデバッグを最初に行う必要があるように聞こえるので、コードがどこに間違っているか正確に教えてください。 – jfriend00

+0

あなたのコードは本当に再構築する必要があります。何を返すのですか?あなたが複数の非同期呼び出しを持っていて、それらを連鎖させるならば、あなたは約束を渡すべきです –

答えて

-1

私は次の関数が約束を返すと仮定しています!

getUsersFromDb() 

あなたは$ .when(functionWhichReturnsAPromise())。その後、( "コードの残りの部分を")を使用して、jQueryの約束を試してみましたか?

+0

まず、これはサーバー側のコードです(したがって、jQueryは本当に適切ではありません)。次に、 '$ .when()'を単一の約束で使用する理由はありません。既に持っている約束にしたがって '.then()'を直接呼び出すことができます。これは実際にOPの質問に対する何らかの回答を提供しているようではありません。 – jfriend00

関連する問題