gpt4 book ai didi

javascript - 与 promise 作斗争 - 如何在外部 then 被调用之前在内部 then 做一些事情?

转载 作者:行者123 更新时间:2023-12-02 22:47:55 26 4
gpt4 key购买 nike

不知道如何问这个问题,而且我真的很难接受 promise ,所以我会尝试使用一个简化的示例。

假设我有一个接受回调的函数。在该函数中,我想进行一个也有回调的异步调用,因此当调用它的回调时,我根据它的响应执行一些操作,然后调用我的回调。

someFunction = function(callback) {
var startTime = (+new Date());
someAsyncCall(function() {
var endTime = (+new Date());
callback(startTime, endTime);
});
};

该函数的作用无关紧要,因为我对事物的结构和顺序感兴趣。但此示例仅记录进行内部异步调用之前和之后的时间,然后调用回调来报告该信息。

现在,对于我的问题,假设 someAsyncCall 已转换为 Promise,someFunction 也转换为返回该 Promise 并且不接受回调。因此,从结构上讲,我的函数现在看起来像这样:

someFunction = function() {
var startTime = (+new Date());
return someAsyncCall();
// How to capture endTime on then before moving on?
};

问题是,我现在想要捕获 someAsyncCall() 之后的结束时间,并在调用 someFunction() 的 then 条件之前在某处记录此数据,大概是在 someAsyncCall() 的 then 条件上。我该怎么做?

<小时/>

更新:我似乎没有得到我正在寻找的答案(或者它只是没有通过我厚实的头脑),所以也许是这样陈述我的问题的更好方法:

让我们从这段示例代码开始:

startProcess = function() {
// Do a bunch of stuff here...
return doProcess(someParams);
}

最终,doProcess 返回一个promise,该promise 由startProcess 返回。然后调用者可以用它做任何事情。

现在,我想在 doProcess 周围包装一些代码来捕获开始和结束时间,而不会对现有代码的操作造成任何干扰。有什么方法可以响应 doProcess 的完成,在它解决 promise 之前做一些事情,通常,对于调用 startProcess 的任何事情?关键是,这个函数不知道谁在调用它,也不知道调用者正在用 Promise 做什么;它本质上只是 doProcess 的包装。

最佳答案

使用 async/await...它使处理 Promise(以及类似的情况)变得更加容易,因为它使所有内容都像同步一样读取。

类似这样的事情。

const someFunction = async () => {
const startTime = (+new Date());
await someAsyncCall();
const endTime = (+new Date());
return [startTime, endTime]
}

另一个没有箭头函数和 const 东西的例子......

var someFunction = async function() {
var startTime = (+new Date());
await someAsyncCall();
var endTime = (+new Date());
return [startTime, endTime]
}

关于javascript - 与 promise 作斗争 - 如何在外部 then 被调用之前在内部 then 做一些事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58313616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com