2011-04-05 5 views
0
function die(err) { 
    console.log('Uh oh: ' + err); 
    process.exit(1); 
} 

var box, cmds, next = 0, cb = function(err) { 
    if (err) 
    die(err); 
    else if (next < cmds.length) 
    cmds[next++].apply(this, Array.prototype.slice.call(arguments).slice(1)); 
}; 

cmds = [ 
    function() { imap.connect(cb); }, 
    function() { imap.openBox('INBOX', false, cb); }, 
    function(result) { box = result; imap.search([ 'UNSEEN', ['SINCE', 'April 5, 2011'] ], cb); }, 
    function(results) { 
    var msgCache = {}, 
     fetch = imap.fetch(results, { request: { headers: ['from', 'to', 'subject', 'date'] } }); 
    console.log('Now fetching headers!'); 
    fetch.on('message', function(msg) { 
     msg.on('end', function() { 
     msgCache[msg.id] = { headers: msg.headers }; 
     }); 
    }); 
    fetch.on('end', function() { 
     console.log('Done fetching headers!'); 
     console.log('Now fetching bodies!'); 
     fetch = imap.fetch(results, { request: { headers: false, body: '1' } }); 
     fetch.on('message', function(msg) { 
     msg.data = ''; 
     msg.on('data', function(chunk) { 
      msg.data += chunk; 
     }); 
     msg.on('end', function() { 
      msgCache[msg.id].body = msg.data; 
     }); 
     }); 
     fetch.on('end', function() { 
     console.log('Done fetching bodies!'); 
     cb(msgCache); 
     }); 
    }); 
    }, 
    function(msgs) { 
    // Do something here with msgs, which contains the headers and 
    // body (parts) of all the messages you fetched 
    console.log("HERE"); 
    imap.logout(cb);  

    } 
]; 
cb(); 

J'utilise ce code pour obtenir les en-têtes et le corps d'un e-mail. Cependant, quand j'essaye de passer le résultat (msgCache) il obtient une erreur.Node.js: Callback retourne une erreur

Qu'est-ce qui me manque herE?

Merci.

Répondre

1

Il semble que vous appeliez cb (msgCache) dans votre callback de fin d'appel, et cb prend le premier argument err. Si err est un objet non vide valide, il appellera votre gestionnaire d'erreur et mourra, donc il appelle le gestionnaire d'erreur même avec un msgCache valide. Pourquoi ne pas appeler console.log (msgCache) au lieu de cb (msgCache) et voir si vous passez à la fin ok.

Ou est-ce qu'il me manque le point où l'erreur se produit?

+0

Il semble que vous avez raison et cb (undefined, msgCache); résout le problème. – donald

Questions connexes