Javascript 使用async Wait时如何将Resolve回调传递到承诺中?
假设我有一个函数,它返回一个Javascript 使用async Wait时如何将Resolve回调传递到承诺中?,javascript,asynchronous,promise,async-await,es6-promise,Javascript,Asynchronous,Promise,Async Await,Es6 Promise,假设我有一个函数,它返回一个承诺: let logData = function () { return new Promise(function (resolve, reject) { // doing some stuff resolve('data'); }); }; 假设我有一个用于resolvecallback的回调函数: let resolveCallback = function (data) { console.log(`
承诺
:
let logData = function () {
return new Promise(function (resolve, reject) {
// doing some stuff
resolve('data');
});
};
假设我有一个用于resolve
callback的回调函数:
let resolveCallback = function (data) {
console.log(`doing some stuff with ${data}`);
};
当我只使用承诺而不使用async await
时,我可以很容易地将此回调传递到承诺中,如下所示:
logData().then(resolveCallback);
在本例中,当我的承诺正在执行时,它将达到resolve('data')代码>行和resolveCallback
将被执行,因为resolve=resolveCallback
现在,当我使用asyncwait
方法时,是否可以以某种方式将resolveCallback
传递到promise中
async function logDataAsync() {
// IS THERE NO WAY TO PASS resolveCallback as resolve PARAMETER HERE???
await logData();
}
同
logData().then(resolveCallback)
如果你使用的是承诺,不要与简单的回调混在一起。调用方应该使用从logDataAsync()
返回的承诺,如logDataAsync()。然后(resolveCallback)
。没有必要发明不同的回调机制。使用承诺中已经包含的一个。你真正想解决的问题是什么?在承诺中包装同步代码并不能使其异步。我怀疑你真的不明白做任何你想做的事情的正确方法,所以你试图强迫承诺去做他们实际上没有做的事情。但是,由于您还没有描述您试图解决的真正问题,我们还不能真正帮助您解决这个问题。仅供参考,这听起来像是用解决方案描述问题,而不是描述实际问题。仅供参考,resolve!==resolveCallback
所以你把那个部分弄错了<代码>解析()
是它自己的函数。调用它会导致调用resolveCallback()
和任何其他。然后()
处理程序.then()
注册一个回调,以便在承诺在将来某个时间解析时调用。当您调用时,.then()
is将回调添加到回调的内部数组中。调用resolve()
时,会导致调用数组中的所有回调(在堆栈展开的短暂延迟之后)。该内部数组中可能有许多不同的回调,因为可以对同一承诺多次调用.then()
,每次都注册另一个回调。logData()
返回一个承诺wait logData()
返回承诺的解析值。这就是等待的工作方式。当您等待Javascript中的承诺时,它会暂停函数的执行,直到该承诺得到解决或拒绝为止。如果解析,它会将解析的值分配给数据
变量,然后继续执行程序。这就像执行logData()。然后(data=>{/*此处的代码*/})
。这不是推荐的设计模式。logDataAsync()
的调用方应该使用它返回的承诺来监视其完成情况。
logData().then(resolveCallback)