2017-05-08 3 views
0

Bitte entschuldigen Sie meine Noobness, aber warum funktioniert das nicht? then() wird nie ausgelöst, und auch nicht error(). Versprechen scheinen sich niemals zu lösen.Bluebird Promisify execFile kann kein Versprechen bekommen, zu lösen

Alle Hinweise geschätzt. Vielen Dank.

+0

Sie dürfen keinen Rückruf an promisfied-Funktionen übergeben. Und Sie sollten niemals den 'neuen Promise'-Konstruktor selbst nennen. – Bergi

+0

Vielen Dank für Ihren Kommentar, aber das hilft mir nicht. – Simon

Antwort

3

Sie verwenden die promisifizierte Version von execFile() nicht ordnungsgemäß.

Sie tun sollten:

const Promise = require('bluebird'); 
const execFile = Promise.promisify(require('child_process').execFile); 

execFile('find', [IMAGE_DIR]).then(function(stdout) { 
    // process result here 
}).catch(function(err) { 
    // handle error here 
}); 

Wenn Sie Zugriff benötigen sowohl auf stdout und stderr, dann müssen Sie die multiArgs Option .promisify() passieren.

const Promise = require('bluebird'); 
const execFile = Promise.promisify(require('child_process').execFile, {multiArgs: true}); 

execFile('find', [IMAGE_DIR]).then(function(args) { 
    let stdout = args[0]; 
    let stderr = args[1]; 
    // process result here 
}).catch(function(err) { 
    // handle error here 
}); 
+0

Vielen Dank, dass Sie sich die Zeit genommen haben, meine Frage zu beantworten. – Simon

2

Ich schätze die Antwort sehr, die jfriend000 gegeben wird. Wenn Sie eine ES7-Lösung mit async-await wünschen:

const Promise = require('bluebird'); 
const execFile = Promise.promisify(require('child_process').execFile 

const find = async() => { 
    try{ 
     let output = await execFile('find', [IMAGE_DIR]); 
     // handle your output with the variable 
    } catch(error) { 
     // handle your errors here 
    } 
} 
Verwandte Themen