javascript - JavaScript - 直到下一个函数完成为止
问题描述
假设我有一个简单的 Node.js 应用程序,它在另一个文件中包含这些方法:
module.exports = {
completeQuest(data) {
// Code here
},
killMonster(data) {
// Also code here
},
};
而且它们不是 AJAX 命令。这些只是在应用程序中操作一些数据。我会这样导出allActions.js
:
const player = require('./playerActions');
module.exports = {
player,
};
当然后来,在主 JS 文件中const actions = require('./allActions');
所以,一般来说,我会这样做:
actions.player.killMonster();
actions.player.completeQuest();
但我希望他们一个接一个地行动。我知道我可以做到async/await
,但我没有做任何 AJAX 调用,所以Promise
仍然是最好的方法吗?
使用yield
函数呢?那会好吗?我正在寻找意见。谢谢你。
解决方案
我将假设killMonster
并completeQuest
执行异步操作。(您说过它们“不是 ajax”,但您的问题表明它们也不是同步的。)
是的,这是promise的一个用例,无论是显式的 promise 还是由async
functions提供的。拥有killMonster
并completeQuest
返回一个承诺(通过明确地这样做或使它们async
发挥作用),然后:
actions.player.killMonster()
.then(
() => actions.player.completeQuest()
)
.catch(error => {
// Handle error
});
或者,在一个async
函数中:
try {
await actions.player.killMonster();
await actions.player.completeQuest();
} catch (error) {
// Handle error
}
这是一个用于提供异步部分的简单async
/await
示例:setTimeout
const delay = (ms, ...args) =>
new Promise(resolve => {
setTimeout(resolve, ms, ...args);
});
// Stand-ins for the actions
const player = {
actions: {
async killMonster() {
await delay(500, "monster killed");
},
async completeQuest() {
await delay(800, "quest complete");
}
}
};
// Top-leve async function (see my answer here:
// https://stackoverflow.com/questions/46515764/how-can-i-use-async-await-at-the-top-level
(async () => {
try {
console.log("Killing monster...");
await player.actions.killMonster();
console.log("Monster killed; completing question...");
await player.actions.killMonster();
console.log("Quest complete");
} catch (e) {
// Deal with error (probably don't just dump it to the console like this does)
console.error(e);
}
})();
推荐阅读
- webpack - 安装 npm webpack-cli 导致无法理解的警告
- c - 使用 HCS12 微控制器防止读取损坏
- php - 使用 JQuery 向表中添加值。使用 PHP 循环创建的表
- csom - 从项目中获取版本
- c - 打印多个字符,格式化为整数
- xgboost - xgboost rank pairwise 什么是预测输入和输出
- ruby-on-rails - 路由在测试中不匹配,但在应用程序中被识别
- c# - CanExecute RelayCommand MVVMLight 5+ 上的奇怪行为
- python-3.x - 在python 3中使用全局变量进行酸洗时调用全局变量会导致错误
- html - CSS网格-溢出时如何让所有列/行均匀增长