Javascript 我如何避免在我的情况下使用另一个承诺?

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

我有两个.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 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
@ramesthredy
async
把你的返回值包装成一个承诺。如果我每次重复这个短语都有一枚硬币,那我就很富有了——“每个
async
函数都会返回一个承诺。你必须使用
。然后()
等待
异步
函数返回值以获得解析值。“一旦在函数中的任何位置异步(如通过承诺)获得结果,则将其返回给调用方的唯一方法是异步(通常通过承诺)。您可以直接返回承诺,也可以使用
async
函数,让JS为您做出承诺。但是,无论哪种方式,您都将返回一个承诺,而调用方将使用
.then()
wait
从承诺中获取值。这就是异步代码和承诺在Javascript中的工作方式。@jfriend00“将其返回给调用方的唯一方法是异步(通常通过承诺)”这终于消除了我的疑虑。我希望你能找到很多镍币并变得富有。你能告诉我使用“.then”或“wait”的原因吗?即使我不使用异步函数?正如我在问题中更新的那样。您更新的代码将无法工作
asyncFunction()。然后((结果)=>{
应返回。
return asyncFunction()。然后((结果)=>{