2015-08-13 20 views

Antwort

-1

Für die einfache asynchrone konvertieren alle Callback zu versprechen, einige Bibliothek wie "bluebird" zu verwenden.

 .then(function(results) { 
       fs.writeFile(ASIN + '.json', JSON.stringify(results), function(err) { 
        if (err) { 
         console.log(err); 
        } else { 
         console.log("JSON saved"); 
         return results; 
        } 
       }) 


      }).catch(function(err) { 
       console.log(err); 
      }); 

Try Lösung mit Versprechen (drossel)

var amazon = require('amazon-product-api'); 
var fs = require('fs'); 
var Promise = require('bluebird'); 

var client = amazon.createClient({ 
    awsId: "XXX", 
    awsSecret: "XXX", 
    awsTag: "888" 
}); 


var array = fs.readFileSync('./test.txt').toString().split('\n'); 
Promise.map(array, function (ASIN) { 
    client.itemLookup({ 
     domain: 'webservices.amazon.de', 
     responseGroup: 'Large', 
     idType: 'ASIN', 
     itemId: ASIN 
    }).then(function(results) { 
     fs.writeFile(ASIN + '.json', JSON.stringify(results), function(err) { 
      if (err) { 
       console.log(err); 
      } else { 
       console.log("JSON saved"); 
       return results; 
      } 
     }) 
    }).catch(function(err) { 
     console.log(err); 
    }); 
}); 
5

aktualisierenSeptember 2017: fs-promise hat sich für fs-extra veraltet.


Ich habe es nicht benutzt, aber Sie in fs-promise aussehen könnte. Es ist ein Knoten-Modul, das:

Proxies alle async fs Methoden sie als Versprechen/A + kompatibel Zusagen (wann, Q, etc.) ausgesetzt wird. Übergibt alle Synchronisierungsmethoden als Werte.

27

Da fs.writefile ein traditioneller asynchroner Rückruf ist - müssen Sie das Versprechen spec folgen und ein neues Versprechen senden Sie es mit einer Entschlossenheit und Ablehnung Handler wie so Einwickeln:

return new Promise(function(resolve, reject) { 
    fs.writeFile("<filename.type>", data, '<file-encoding>', function(err) { 
     if (err) reject(err); 
     else resolve(data); 
    }); 
}); 

Also in Ihrem Code würden Sie verwenden sie es wie so direkt nach dem Aufruf .then()

.then(function(results) { 
    return new Promise(function(resolve, reject) { 
      fs.writeFile(ASIN + '.json', JSON.stringify(results), function(err) { 
       if (err) reject(err); 
       else resolve(data); 
      }); 
    }); 
    }).then(function(results) { 
     console.log("results here: " + results) 
    }).catch(function(err) { 
     console.log("error here: " + err); 
    }); 
2

sagen

const util = require('util') 
const fs_writeFile = util.promisify(fs.writeFile) 

https://nodejs.org/api/util.html#util_util_promisify_original

dies ist weniger anfällig für Fehler als die Top-gestimmt Antwort

+2

'util.promisify' in node.js Version 8. Gedanken hinzugefügt wurde diese Informationen könnten für Menschen hilfreich sein, zu denken, es zu benutzen . – Tim