Javascript 将回调传递到异步函数中,甚至再次包装它,这正常吗?
app.jsJavascript 将回调传递到异步函数中,甚至再次包装它,这正常吗?,javascript,node.js,asynchronous,promise,async-await,Javascript,Node.js,Asynchronous,Promise,Async Await,app.js import test from "./asyncTest"; test().then((result)=>{ //handle my result }); asyncTest.js const test = async cb => { let data = await otherPromise(); let debounce = _.debounce(() => { fetch("https://jsonplaceho
import test from "./asyncTest";
test().then((result)=>{
//handle my result
});
const test = async cb => {
let data = await otherPromise();
let debounce = _.debounce(() => {
fetch("https://jsonplaceholder.typicode.com/posts/1")
.then( => response.json())
.then(json => json );
}, 2000);
};
export default test;
const test = async cb => {
let debounce = _.debounce(() => {
fetch("https://jsonplaceholder.typicode.com/posts/1")
.then(response => response.json())
.then(json => cb(null, json))
.catch(err => cb(err));
}, 2000);
};
const pTest = cb => {
return new Promise((resolve, reject) => {
test((err, data) => {
if (err) reject(err);
resolve(data);
});
});
};
export default pTest;
这种方法对我来说很有效,但我想知道它是否正确,或者是否有任何方法可以解决这种情况?获取API已经返回了一个承诺。用另一个Promise对象包装它实际上是一种反模式。它与下面的代码一样简单:
/*导出*/async函数测试(){
让数据=等待其他承诺();
返回取回(“https://jsonplaceholder.typicode.com/posts/1")
.then(response=>response.json())
。然后(json=>{
返回{
json:json,
数据:数据
}
});
};
函数otherPromise(){
返回新承诺((解决、拒绝)=>{
解析(“数据值测试”);
});
}
//在index.js调用中
test()。然后(res=>{
console.log(res)
});如果期望返回值,则使用async
而不使用wait
的代码>没有任何实用程序。取消获取请求的公告的目的是什么?我必须在测试函数中使用其他等待承诺。刚刚编辑过,谢谢。使用deounce的目的并不重要,我试图表示需要返回的值在另一个函数中。setTimeout可能是一个更好的例子。我修改了我的答案,加入了你的等待。请检查您能正确缩进代码吗?这真的很难读。另外,您的test
函数不返回任何内容,并且从不调用取消公告的函数,这是有意的吗?对于初学者,您应该将return添加到fetch函数调用中,以便它返回链接承诺。此外,异步cb没有意义,您没有在回调“模式”中使用它,但在承诺模式中,我看到您无论如何都没有使用它,但这对读者来说非常混乱。请删除async
和wait
。这里既不需要也不有用。您只是从一个常规函数返回一个承诺。@jfriend00-OP希望对其他异步函数进行操作,并将测试函数内部和测试外部的响应作为返回值。也希望以同步方式执行此操作。return await fetch()
没有任何意义。等待
是毫无意义的。async
函数始终返回承诺。所以,只需执行return fetch()…
是的,我现在当然明白你的意思了——这是在蒙蔽我自己。谢谢这样,我必须将返回值保持在测试函数的顶层,有时这很困难,例如使用deound包装器。但当传递回调并将其包装到pTest时,我可以通过调用测试函数中任何位置的cb(数据)来传递值。解决方案仍然是好的。谢谢你,伙计。