Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ES6 Javascript Promise-调用.then()后执行_Javascript_Ecmascript 6_Callback_Promise_Es6 Promise - Fatal编程技术网

ES6 Javascript Promise-调用.then()后执行

ES6 Javascript Promise-调用.then()后执行,javascript,ecmascript-6,callback,promise,es6-promise,Javascript,Ecmascript 6,Callback,Promise,Es6 Promise,如果希望在JavaScript中调用回调后执行代码,则可以将其放在回调后: function demoCallback(callback) { callback() console.log("I execute second") } demoCallback(() => { console.log("I execute first") }) 是否可以在功能范围内对ES6承诺执行相同的操作?假设我有一个函数返回一个承诺: function demoPromise() {

如果希望在JavaScript中调用回调后执行代码,则可以将其放在回调后:

function demoCallback(callback) {
  callback()
  console.log("I execute second")
}

demoCallback(() => {
  console.log("I execute first")
})
是否可以在功能范围内对ES6承诺执行相同的操作?假设我有一个函数返回一个承诺:

function demoPromise() {
  return new Promise((resolve, reject) => {
    resolve()
    console.log("I execute first")
  })
}

demoPromise().then(() => { console.log("I execute second") })

解析之后插入的代码在承诺解析后执行,但在之前,则在函数范围之外调用是否有一种方法可以在两者之后执行代码,但在函数范围内执行?

您可以使用一个可以在then块中调用的函数来解决承诺问题。只要在块内调用该函数,就可以像这样在它之前执行代码

函数demoPromise(){
返回新承诺((解决、拒绝)=>{
解析(函数(){
log(“我第二次执行”)
});
})
}
然后(f=>{console.log(“我首先执行”);f();})
是否可以在功能范围内对ES6承诺执行相同的操作

不,这是不可能的
then
回调始终异步运行,这包括对
resolve()
调用的异步

(也就是说,promise回调是排队的,因此您可以滥用该队列以使代码落后于其他队列:

function demoPromise() {
  const p = new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve();
      p.then(() => {
        console.log("I execute second");
      }); // because I will be scheduled second
    }, 1000);
  });
  return p;
}

demoPromise().then(() => {
   console.log("I execute first");
}); // because I was scheduled first
但请不要这样做)

如果您想在JavaScript中调用回调后执行代码

那么你可能不应该只是回报一个承诺。在执行代码之前,执行一个执行所需操作的回调:

function demoPromise(callback) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, 1000);
  }).then(() => {
    return callback();
  }).then(res => {
    console.log("I execute second");
  });
}

demoPromise(() => {
   console.log("I execute first");
}).then(() => {
   console.log("I execute last");
});

这被称为,对处理资源非常有用。

它仍将运行,但不一定在之前运行。现在还不清楚你在这里问什么,
解决
是你控制的事情,你决定何时解决你的承诺,。。因此,在上面的示例中,如果您想要
第一次/第二次
,。只需更改顺序
console.log(“第一”);解决()
您可以将一个函数传递给
resolve
并在
中调用该函数,然后
@Keith也许我粗体了一个错误的问题。我在问(特别是)一个在底部加粗的问题。我可以在承诺解析并调用.then()后执行代码吗?但是在函数的范围内?遗憾的是,即使是那一点点
;f()
是太多的代码:-)-处理器的要点是不管调用代码做什么,它都会进行清理;如果打电话的人必须记得打回电话,那么墨菲定律说他们迟早不会。