如何从内部函数解析外部异步函数
How to resolve an outer async function from an inner function
如何在用户回答对话框提示后使用指示用户未成年状态 (true/false) 的布尔值解析外部异步函数 askIfUserIsAMinor?例如:
async function askIfUserIsAMinor() {
let dialogButtons = [
{
text: "Yes",
onPress: () => {
// I want to return 'false' on the outer async function
}
},
{
text: "No",
onPress: () => {
// I want to return 'true' on the outer async function
}
}
];
dialog.prompt("Are you above the age of 18?", dialogButtons);
}
let userIsAMinor = await askIfUserIsAMinor();
if (userIsAMinor) {
// let user proceed
} else {
// show something else
}
是的,没有async/await还有很多其他方法可以解决这个问题,但我的用例比这个复杂得多,这只是一个简化的场景。在 ES6 中,这可以通过使用 askIfUserIsAMinor
return 承诺并让内部 onPress
函数调用外部承诺 resolve
来解决。
这段代码实际上工作正常 - 承诺 dialog.prompt,然后你等待 async function testMinor
中的承诺 - 我之前发布的代码落入了其他人总是落入的相同陷阱,思考以某种方式可以使异步代码同步...
function askIfUserIsAMinor() {
return new Promise(function(resolve) {
let dialogButtons = [{
text: "Yes",
onPress: () => resolve(true)
}, {
text: "No",
onPress: () => resolve(false)
}];
dialog.prompt("Are you above the age of 18?", dialogButtons);
});
}
async function testMinor() {
let userIsAMinor = await askIfUserIsAMinor();
if (userIsAMinor) {
// let user proceed
} else {
// show something else
}
}
或
async function askIfUserIsAMinor() {
let userIsAMinor = await new Promise(function(resolve) {
let dialogButtons = [{
text: "Yes",
onPress: () => resolve(true)
}, {
text: "No",
onPress: () => resolve(false)
}];
dialog.prompt("Are you above the age of 18?", dialogButtons);
});
if (userIsAMinor) {
// let user proceed
} else {
// show something else
}
}
askIfUserIsAMinor();
如何在用户回答对话框提示后使用指示用户未成年状态 (true/false) 的布尔值解析外部异步函数 askIfUserIsAMinor?例如:
async function askIfUserIsAMinor() {
let dialogButtons = [
{
text: "Yes",
onPress: () => {
// I want to return 'false' on the outer async function
}
},
{
text: "No",
onPress: () => {
// I want to return 'true' on the outer async function
}
}
];
dialog.prompt("Are you above the age of 18?", dialogButtons);
}
let userIsAMinor = await askIfUserIsAMinor();
if (userIsAMinor) {
// let user proceed
} else {
// show something else
}
是的,没有async/await还有很多其他方法可以解决这个问题,但我的用例比这个复杂得多,这只是一个简化的场景。在 ES6 中,这可以通过使用 askIfUserIsAMinor
return 承诺并让内部 onPress
函数调用外部承诺 resolve
来解决。
这段代码实际上工作正常 - 承诺 dialog.prompt,然后你等待 async function testMinor
中的承诺 - 我之前发布的代码落入了其他人总是落入的相同陷阱,思考以某种方式可以使异步代码同步...
function askIfUserIsAMinor() {
return new Promise(function(resolve) {
let dialogButtons = [{
text: "Yes",
onPress: () => resolve(true)
}, {
text: "No",
onPress: () => resolve(false)
}];
dialog.prompt("Are you above the age of 18?", dialogButtons);
});
}
async function testMinor() {
let userIsAMinor = await askIfUserIsAMinor();
if (userIsAMinor) {
// let user proceed
} else {
// show something else
}
}
或
async function askIfUserIsAMinor() {
let userIsAMinor = await new Promise(function(resolve) {
let dialogButtons = [{
text: "Yes",
onPress: () => resolve(true)
}, {
text: "No",
onPress: () => resolve(false)
}];
dialog.prompt("Are you above the age of 18?", dialogButtons);
});
if (userIsAMinor) {
// let user proceed
} else {
// show something else
}
}
askIfUserIsAMinor();