我无法理解如何在 Express 中正确编写使用 async/await 的中间件,但在执行后不会让 Promise 漂浮在以太坊中。我已经阅读了大量博客和 StackOverflow 帖子,似乎在 async/await 中间件中使用以下模式达成了一些共识:
const asyncHandler = fn => (req, res, next) =>
Promise
.resolve(fn(req, res, next))
.catch(next)
app.use(asyncHandler(async (req, res, next) => {
req.user = await User.findUser(req.body.id);
next();
}));
Run Code Online (Sandbox Code Playgroud)
我知道这使得不必在所有 aysnc 路由处理程序中使用 try..catch 逻辑成为可能,并且它确保 (async (req, res, next) => {}) 返回的 Promise函数已解决,但我的问题是我们正在从 asyncHandler 的 Promise.resolve() 调用返回一个 Promise:
Promise
.resolve(fn(req, res, next))
.catch(next)
Run Code Online (Sandbox Code Playgroud)
并且永远不要在这个返回的 Promise 上调用 then()。使用这种模式是因为我们不依赖中间件函数的任何返回值吗?只返回 Promises 并且从不调用 then() 来获取它们的值是否可以,因为 Express 中的中间件没有返回有意义的值?
我知道 async/await 允许我们处理异步代码并轻松处理返回的值,但是在 Express 中间件中,我们只剩下顶级异步,它解析为 Promise,然后我们使用 Promise.resolve 解析(),但它仍然解析为一个 Promise ...... …
有没有办法从数组中提取值并在Ruby中为每个值分配一个唯一的键?
我希望能够改变这个数组:
["12", "21", "1985"]
Run Code Online (Sandbox Code Playgroud)
进入这个哈希:
{:month => "12", :day => "21", :year => "1985"}
Run Code Online (Sandbox Code Playgroud)
我宁愿不单独分配每个值,如下所示:
arr = ["12", "21", "1985"]
bday_hash = {:month => arr[0], :day => arr[1], :year => arr[2]}
Run Code Online (Sandbox Code Playgroud) 我正在完成Oracle发布的"Java教程",我不知道为什么我无法从"并发"一章中获取本例中的条件语句来执行:
if ((System.currentTimeMillis() - startTime > patience) &&
msgThread.isAlive())
Run Code Online (Sandbox Code Playgroud)
startTime变量在此上面初始化为:
long startTime = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
耐心变量可以是硬编码值(1小时)或作为命令行参数传入的值(以秒为单位).
long patience = 1000 * 60 * 60; // initially 1 hour of patience
// if there is a command-line arg
if (args.length > 0) {
try {
// takes command-line arg as seconds
patience = Long.parseLong(args[0]) * 1000;
}
catch (NumberFormatException e) {
System.err.println("Invalid commmand-line argument, " +
"terminating...");
System.exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我使用各种命令行参数运行程序时(即使我传入1,它应该在1秒后结束,我在响应中没有任何区别!),它们都没有实际获得条件语句是真的,然后会中断msgThread并在屏幕上打印一条消息:
// if the amount of time passed is more than patience …Run Code Online (Sandbox Code Playgroud) arrays ×1
async-await ×1
concurrency ×1
conditional ×1
es6-promise ×1
express ×1
hashmap ×1
java ×1
javascript ×1
middleware ×1
ruby ×1