Javascript,一个带有回调处理程序的对象,如何将其重写为wait/async样式?
我使用了一个api,它的对象提供回调处理程序,一个搜索函数Javascript,一个带有回调处理程序的对象,如何将其重写为wait/async样式?,javascript,asynchronous,promise,async-await,Javascript,Asynchronous,Promise,Async Await,我使用了一个api,它的对象提供回调处理程序,一个搜索函数 function searchAndDoSomething(name){ let searchObj = new APIobj(para1,{onSearchComplete:searchCompleteHandler}); searchObj.search(name); } function searchCompleteHandler(result){ doSomething(result); } Async
function searchAndDoSomething(name){
let searchObj = new APIobj(para1,{onSearchComplete:searchCompleteHandler});
searchObj.search(name);
}
function searchCompleteHandler(result){
doSomething(result);
}
Async Main(){
result = await searchAndDoSomething(name);
searchCompleteHandler(result);
}
async Main() { // Note it's `async`, not `Async`
const result = await searchAndDoSomething(name); // note declaration
searchCompleteHandler(result);
}
我的目标是这样做:
function searchAndDoSomething(name){
let searchObj = new APIobj(para1,{onSearchComplete:searchCompleteHandler});
searchObj.search(name);
}
function searchCompleteHandler(result){
doSomething(result);
}
Async Main(){
result = await searchAndDoSomething(name);
searchCompleteHandler(result);
}
async Main() { // Note it's `async`, not `Async`
const result = await searchAndDoSomething(name); // note declaration
searchCompleteHandler(result);
}
但是如何重写searchAndDoSomething呢
async searchAndDoSomething(name){
return new Promise(function(resolve){
let searchObj = new APIobj(para1,{onSearchComplete:resolve};//this will call a resolve function.
//and
resolve(name);//instead of searchObj.search will no effect too.
})
}
您的尝试已接近尾声,但由于您需要显式地创建承诺(因为
APIobj
没有),因此您的函数没有理由是async
。此外,您只需调用resolve
一次:
searchAndDoSomething(name) {
return new Promise((resolve) => {
const searchObj = new APIobj(para1, {onSearchComplete: resolve});
searchObj.search(name);
});
}
大概有一种方法可以让APIobj发出故障信号;如果是这样,您需要调用拒绝
。例如,如果我猜测一个名为onSearchError
的回调:
searchAndDoSomething(name) {
return new Promise((resolve, reject) => {
const searchObj = new APIobj(para1, {
onSearchComplete: resolve,
onSearchError: reject
});
searchObj.search(name);
});
}
然后,您可以这样使用:
function searchAndDoSomething(name){
let searchObj = new APIobj(para1,{onSearchComplete:searchCompleteHandler});
searchObj.search(name);
}
function searchCompleteHandler(result){
doSomething(result);
}
Async Main(){
result = await searchAndDoSomething(name);
searchCompleteHandler(result);
}
async Main() { // Note it's `async`, not `Async`
const result = await searchAndDoSomething(name); // note declaration
searchCompleteHandler(result);
}
或
APIobj
是否无法发出失败的信号?我查阅了说明,似乎搜索结果对象没有我认为您的评论在那里被截断了…我查阅了说明,似乎搜索“结果”对象没有失败的类型,也许我不知道失败的位置。所以我屏蔽了我的WiFi,看到控制台弹出一个GET错误。以0()结尾。感谢@Bergi,一如既往的敏锐目光!