Javascript 我如何保证方法在保存后运行?

Javascript 我如何保证方法在保存后运行?,javascript,ecmascript-6,promise,Javascript,Ecmascript 6,Promise,我正在打开PDF,但我想在打开PDF之前保存。它可以工作,但在PDF打开之前没有足够的时间保存所有内容 save = (content) => { this.props.toggleSaving(); this.props.setSaveFailedStatus(false); this.props.saveContent(content); this.props.toggleSaving(); }; openPdf = (content

我正在打开PDF,但我想在打开PDF之前保存。它可以工作,但在PDF打开之前没有足够的时间保存所有内容

  save = (content) =>  {
    this.props.toggleSaving();
    this.props.setSaveFailedStatus(false);
    this.props.saveContent(content);
    this.props.toggleSaving();
  };


   openPdf = (content) => {
     this.save(content);
    window.open(`${window.location.pathname}/print`, '_blank');
   }

LMK最佳方法是什么
this.save
是一个可在其他地方重用的函数。

我假设此函数异步执行此操作:

this.props.saveContent(content);
该函数应该有一个回调,或者更好的是返回一个承诺,这样您就可以在它完成后对任务进行排序

function saveContent(content) { 
  return new Promise((resolve, reject) => {
    // ...do save
    resolve(result);
  });
}
因为函数是异步的,所以您的
保存
函数现在也需要是异步的,这意味着它应该返回一个承诺:

save = (content) =>  {
  this.props.toggleSaving();
  this.props.setSaveFailedStatus(false);
  return this.props.saveContent(content)
    .then(() => this.props.toggleSaving());
};
…您的
openPdf
功能现在可以等待
save
完成:

openPdf = (content) => {
  return this.save(content).then(() => {
    window.open(`${window.location.pathname}/print`, '_blank');
  });
}

如果您的环境或Babel transpiler支持此功能,您可以使用此功能使其更方便。

我假设此功能异步执行此操作:

this.props.saveContent(content);
该函数应该有一个回调,或者更好的是返回一个承诺,这样您就可以在它完成后对任务进行排序

function saveContent(content) { 
  return new Promise((resolve, reject) => {
    // ...do save
    resolve(result);
  });
}
因为函数是异步的,所以您的
保存
函数现在也需要是异步的,这意味着它应该返回一个承诺:

save = (content) =>  {
  this.props.toggleSaving();
  this.props.setSaveFailedStatus(false);
  return this.props.saveContent(content)
    .then(() => this.props.toggleSaving());
};
…您的
openPdf
功能现在可以等待
save
完成:

openPdf = (content) => {
  return this.save(content).then(() => {
    window.open(`${window.location.pathname}/print`, '_blank');
  });
}


如果您的环境或Babel transpiler支持此功能,您可以使用以使其更方便。

此功能是什么。是否保存?它是否返回承诺?@Paulpro updated您正在调用的函数中哪些是异步的?他们中的哪一个要么自己返回一个承诺,要么在完成时接受一个通知的回调。不必胡乱猜测,我们只能在了解所有函数的实际功能时提供帮助,这些功能是异步的,以及它们如何通知调用方它们已完成。承诺本身并没有管理异步操作的魔力,您必须使用现有的机制来了解异步操作何时完成。你现在的问题是,人们只能猜测如何帮助你(雅各布在他的回答中就是这么做的)。@ZenaMesfin-你刚才消失了吗?我们问了一些澄清性问题,您没有回答。这是什么?是否保存?它是否返回承诺?@Paulpro updated您正在调用的函数中哪些是异步的?他们中的哪一个要么自己返回一个承诺,要么在完成时接受一个通知的回调。不必胡乱猜测,我们只能在了解所有函数的实际功能时提供帮助,这些功能是异步的,以及它们如何通知调用方它们已完成。承诺本身并没有管理异步操作的魔力,您必须使用现有的机制来了解异步操作何时完成。你现在的问题是,人们只能猜测如何帮助你(雅各布在他的回答中就是这么做的)。@ZenaMesfin-你刚才消失了吗?我们问了一些澄清性的问题,你没有回答。要求OP实际告诉我们他们的哪些操作是异步的,以及他们有什么接口来知道它们何时完成,这难道不是比只允许他们写一个不完整的问题并猜测如何解决它更好吗?难道我们不应该训练人们写出不需要猜测的完整问题吗?我不知道,从描述中似乎很清楚,
saveContent
对问题执行一些异步操作。我不知道JavaScript如何在不异步的情况下神奇地执行IO。node.js具有同步I/O。它可能使用
fs.writeFileSync()
。例如我们不知道它在做什么。“在PDF打开之前,它没有足够的时间保存所有内容”所以,我想,你没有兴趣帮助教授OP如何写一个完整而清晰的问题?如果您的猜测都是正确的,那么它们至少应该提供
saveContent()
的接口。没关系,你显然不在乎,所以我现在就走。我认为,当我们帮助教育/教导人们如何写出好的问题时,这对社区是有益的,因为这些问题包含了提供不需要猜测的完整答案所必需的所有信息。以及,一个好的提问者在有问题的时候也不应该消失3个小时。要求OP告诉我们他们的哪些操作是异步的,以及他们有什么接口来知道何时完成,这难道不是比只允许他们写一个不完整的问题并猜测如何解决更好吗信息技术难道我们不应该训练人们写出不需要猜测的完整问题吗?我不知道,从描述中似乎很清楚,
saveContent
对问题执行一些异步操作。我不知道JavaScript如何在不异步的情况下神奇地执行IO。node.js具有同步I/O。它可能使用
fs.writeFileSync()
。例如我们不知道它在做什么。“在PDF打开之前,它没有足够的时间保存所有内容”所以,我想,你没有兴趣帮助教授OP如何写一个完整而清晰的问题?如果您的猜测都是正确的,那么它们至少应该提供
saveContent()
的接口。没关系,你显然不在乎,所以我现在就走。我认为,当我们帮助教育/教导人们如何写出好的问题时,这对社区是有益的,因为这些问题包含了提供不需要猜测的完整答案所必需的所有信息。而且,一个好的提问者也不应该在有问题的时候消失3个小时。