Ich versuche, bestehenden Code mit zusätzlichen Versprechungen zu erweitern, aber sie sind im Moment ein neues Thema für mich und ich vermisse offensichtlich etwas. Dies wird als Teil eines Build-Skripts für npm ausgeführt.Ich kann keine Versprechungen zur Arbeit bekommen, die folgenden Versprechen werden nicht genannt.
Alles, was ich gerade versuche, geschehen zu lassen, ist für das Finale dann aufgerufen werden, nachdem der Packvorgang für jede Architektur passiert ist. Ich habe versucht, es in einem
return new Promise
Einwickeln Aber im Moment kann ich nichts von dieser Funktion zurückkehre, so dass ich nicht sicher bin, was ich in der Entschlossenheit Anruf am Ende enthalten soll. Wenn ich nur die Auflösung mit einem wahren Anruf nenne, passiert nichts, und wenn man es in ein Versprechen einpackt, scheint die Funktion tatsächlich nicht ausgeführt zu werden, und nirgends werden Fehler entdeckt.
Ich schätze, ich gehe völlig falsch, alles, was ich erreichen möchte, ist eine andere Funktion zu führen, sobald der vorherige abgeschlossen ist?
Hier ist der Code, wie es mit dem zusätzlichen steht., Dann kann ich nicht aufgerufen werden.
function build(cfg) {
return new Promise((resolve, reject) => {
webpack(cfg, (err, stats) => {
if (err) return reject(err);
resolve(stats);
});
});
}
function startPack() {
console.log('start pack...');
build(electronCfg)
.then(() => build(cfg))
.then(() => del('release'))
.then(paths => {
if (shouldBuildAll) {
// build for all platforms
const archs = ['ia32', 'x64'];
const platforms = ['linux', 'win32', 'darwin'];
platforms.forEach(plat => {
archs.forEach(arch => {
pack(plat, arch, log(plat, arch));
});
});
} else {
// build for current platform only
pack(os.platform(), os.arch(), log(os.platform(), os.arch()));
}
})
.then(() => {
console.log('then!');
})
.catch(err => {
console.error(err);
});
}
function pack(plat, arch, cb) {
// there is no darwin ia32 electron
if (plat === 'darwin' && arch === 'ia32') return;
const iconObj = {
icon: DEFAULT_OPTS.icon + (() => {
let extension = '.png';
if (plat === 'darwin') {
extension = '.icns';
} else if (plat === 'win32') {
extension = '.ico';
}
return extension;
})()
};
const opts = Object.assign({}, DEFAULT_OPTS, iconObj, {
platform: plat,
arch,
prune: true,
'app-version': pkg.version || DEFAULT_OPTS.version,
out: `release/${plat}-${arch}`,
'osx-sign': true
});
packager(opts, cb);
}
'cfg' ist nicht definierte Variable hier' .then (() = > build (cfg)) 'und sollte im strikten Modus eine Ablehnung verursachen. Es sollte 'dann ((cfg) => build (cfg))' sein. Was vielleicht nicht sinnvoll ist oder nicht, ist eine andere Frage, ob "webpack" zweimal auf sein eigenes Ergebnis angesprochen werden soll. – estus
Danke für die schnelle Antwort, cfg ist weiter oben in der Datei definiert, wie es hier ist, das läuft gut, was ich nicht passieren kann, ist die endgültige. Dann aufgerufen werden? –
Ich sehe nichts falsch mit diesem Code. Das vorletzte '.then' ist nicht einmal asynchron (kein Versprechen), also braucht man nicht einmal ein' '' '' ''' ', um diesen Code zu erweitern, wie er geschrieben wurde (aber es sollte funktionieren). Ich schlage vor, Sie bestätigen Ihre Annahmen. – jib