Я пытаюсь расширить существующий код с дополнительными обещаниями, но для меня это новая тема для меня в данный момент, и я, очевидно, что-то пропустил. Это выполняется как часть скрипта сборки для npm.Невозможно получить обещания работать, последующие обещания не называются
Все, что я в настоящее время пытаюсь сделать, это то, что финальный вызов будет вызван после того, как операция пакета произошла для каждой архитектуры. Я попытался окружив его
return new Promise
Но на данный момент я не возвращающее ничего из этой функции, так что я не уверен, что я должен включить в Resolve вызова в конце. Если я просто вызываю решение с истинным, ничего не происходит, и, заверяя его в обещание, кажется, что функция фактически не запускается, и нигде не обнаруживаются ошибки?
Я предполагаю, что я собираюсь сделать это совершенно неправильно, все, что я хочу достичь, - запустить другую функцию после завершения предыдущего?
Вот код в том виде, как он стоит с дополнительным. То, что я не могу называться.
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' является неопределенной переменной здесь' .then (() = > build (cfg)) 'и должен вызывать отклонение в строгом режиме. Это должно быть 'then ((cfg) => build (cfg))'. Что может или не имеет смысла, это еще один вопрос, если «webpack» должен быть вызван по собственному результату дважды. – estus
Спасибо за быстрый ответ, cfg определяется дальше по файлу, так как он прямо здесь, это отлично работает, что я не могу сделать, это окончательный. Then to be called? –
Я не вижу ничего плохого в этом коде. Второй, чтобы продолжить '.then' даже не асинхронный (не возвращая обещание), так что вам даже не понадобится другой' .then', чтобы продлить этот код, как написано (но он должен работать). Я предлагаю вам пересмотреть свои предположения. – jib