Javascript 我如何避免在我的情况下使用另一个承诺?
我有两个.js文件,如: index.js:Javascript 我如何避免在我的情况下使用另一个承诺?,javascript,promise,es6-promise,Javascript,Promise,Es6 Promise,我有两个.js文件,如: index.js: app.get("/testing", (req, res) => { testAsyncFunction().then((resolvedData) => { res.send(resolvedData); }); }) app.get("/testing", (req, res) => { res.send(testAsyncFunction()); }) 和server.js: const asyncF
app.get("/testing", (req, res) => {
testAsyncFunction().then((resolvedData) => {
res.send(resolvedData);
});
})
app.get("/testing", (req, res) => {
res.send(testAsyncFunction());
})
和server.js:
const asyncFunction = () => {
return new Promise((res) => {
setTimeout(() => {
res('resolved');
},3000 )
})
}
const testAsyncFunction = () => {
return new Promise(async (res) => {
const result = await asyncFunction();
return res(result);
})
}
这是按预期工作的,但如果我将testAsyncFunction(这样我就不会创建新的承诺)更改为如下内容:
const testAsyncFunction = async () => {
const result = await asyncFunction();
return result;
}
const testAsyncFunction = () => {
asyncFunction().then((result) => {
return result;
})
}
在index.js中:
app.get("/testing", (req, res) => {
res.send(testAsyncFunction());
})
我得到一个空的对象,因为它没有等待3秒,在后一种情况下我缺少什么?我想避免仅仅为了等待另一个承诺而创造一个新的承诺
更新
我将TestAsyncFunction更改为以下内容:
const testAsyncFunction = async () => {
const result = await asyncFunction();
return result;
}
const testAsyncFunction = () => {
asyncFunction().then((result) => {
return result;
})
}
即使是上述功能。这不是一个异步函数,为什么我还要在
index.js
中等待它。我假设在这种情况下返回的值不是一个承诺,所以这是我感到困惑的部分。这样我就不会创建一个新的承诺,这就是它应该是的,另一种方式是反模式。但是,当函数返回承诺时,需要等待相同的承诺
app.get("/testing", async (req, res) => {
let obj = await testAsyncFunction()
res.send(obj );
});
或
async
函数总是返回承诺。这相当于:
const testAsyncFunction = () => {
return asyncFunction();
}
我想避免仅仅为了等待另一个承诺而创造一个新的承诺
因此,只要使用现有的承诺:
app.get("/testing", (req, res) => {
asyncFunction().then((resolvedData) => {
res.send(resolvedData);
});
})
const asyncFunction = () => {
return new Promise((res) => {
setTimeout(() => {
res('resolved');
},3000 )
})
}
我认为在这种情况下,您无法避免在app.get()
回调中“创建另一个承诺”。你可以用async/wait
@ramesthredyasync
把你的返回值包装成一个承诺。如果我每次重复这个短语都有一枚硬币,那我就很富有了——“每个async
函数都会返回一个承诺。你必须使用。然后()
或等待
从异步
函数返回值以获得解析值。“一旦在函数中的任何位置异步(如通过承诺)获得结果,则将其返回给调用方的唯一方法是异步(通常通过承诺)。您可以直接返回承诺,也可以使用async
函数,让JS为您做出承诺。但是,无论哪种方式,您都将返回一个承诺,而调用方将使用.then()
或wait
从承诺中获取值。这就是异步代码和承诺在Javascript中的工作方式。@jfriend00“将其返回给调用方的唯一方法是异步(通常通过承诺)”这终于消除了我的疑虑。我希望你能找到很多镍币并变得富有。你能告诉我使用“.then”或“wait”的原因吗?即使我不使用异步函数?正如我在问题中更新的那样。您更新的代码将无法工作asyncFunction()。然后((结果)=>{
应返回。return asyncFunction()。然后((结果)=>{