Promisify一个JavaScript回调函数
我一直在阅读有关async/Wait和Promissions的所有资料,但我无法让它正常工作。我不断得到“承诺”,当它实现时,我收到“未定义” 我想我已经花了大约两天的时间在这上面了!我不知道怎么了。这是未承诺的版本Promisify一个JavaScript回调函数,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,我一直在阅读有关async/Wait和Promissions的所有资料,但我无法让它正常工作。我不断得到“承诺”,当它实现时,我收到“未定义” 我想我已经花了大约两天的时间在这上面了!我不知道怎么了。这是未承诺的版本 const getCoords = (address) => { geocoder.addressSearch(address, (result) => { return result; } ); }; 下面是我对承
const getCoords = (address) => {
geocoder.addressSearch(address, (result) => {
return result;
}
);
};
下面是我对承诺代码的尝试:
const getCoords = async (address) => {
await geocoder.addressSearch(address, async (result) => {
return result;
}
);
})
我只是想返回结果。如果有人能把我引向正确的方向,我将不胜感激。你的两个例子都是错误的 使用连续传球方式 在这种风格中,延续(“回调”)忽略任何
返回值,因为此函数从主调用异步运行-
const地理编码器=
{addressSearch:(地址,回调)=>
设置超时(回调,1000{
coords:[12.345,67.890]
})
}
const getCoords=(地址,回调)=>
地址搜索(地址,结果=>
回调(result.coords)
)
getCoords(“foobar”,console.log)
//[12.345,67.89]
你的两个例子都不正确
使用连续传球方式
在这种风格中,延续(“回调”)忽略任何返回值,因为此函数从主调用异步运行-
const地理编码器=
{addressSearch:(地址,回调)=>
设置超时(回调,1000{
coords:[12.345,67.890]
})
}
const getCoords=(地址,回调)=>
地址搜索(地址,结果=>
回调(result.coords)
)
getCoords(“foobar”,console.log)
//[12.345,67.89]
您的承诺代码是什么样子的?我刚刚更新了问题。你能帮忙吗?你的承诺代码是什么样子的?我刚刚更新了这个问题。你能帮忙吗?哇,这篇文章写得很透彻也很好。我唯一的问题是我以前对geocoder的定义是这样的:const geocoder=new kakao.maps.services.geocoder();所以我对你答案的第一行有意见。您对此有什么建议吗?我在示例中使用了geocoder
的一个“假”实现,这样我们可以看到它们是如何工作的,并且可以在您自己的浏览器中在站点上进行测试。如果kakao.maps.services.Geocoder
是以连续传递样式编写的,那么您将像第一个示例中那样编写getCoords
。如果Geocoder
提供了一个基于承诺的API,您将像我们在第二个示例中所做的那样编写getCoords
。注意,如果它是使用回调样式编写的,那么它很可能遵循节点的。有关如何与async
和wait
一起使用的更多说明和示例,请参阅。如果你在那之后被卡住了,请将文档链接到你正在使用的库中,我会尝试查看它。哇,这篇文章写得非常透彻和出色。我唯一的问题是我以前对geocoder的定义是这样的:const geocoder=new kakao.maps.services.geocoder();所以我对你答案的第一行有意见。您对此有什么建议吗?我在示例中使用了geocoder
的一个“假”实现,这样我们可以看到它们是如何工作的,并且可以在您自己的浏览器中在站点上进行测试。如果kakao.maps.services.Geocoder
是以连续传递样式编写的,那么您将像第一个示例中那样编写getCoords
。如果Geocoder
提供了一个基于承诺的API,您将像我们在第二个示例中所做的那样编写getCoords
。注意,如果它是使用回调样式编写的,那么它很可能遵循节点的。有关如何与async
和wait
一起使用的更多说明和示例,请参阅。如果你在那之后被卡住了,请将文档链接到你正在使用的库中,我将尝试查看它。