我创建了一个函数,该函数提示用户输入URL,然后验证输入的输入实际上是一个URL。问题是,当我从另一个函数调用这个函数时,我已经能够让它等待用户输入,但它在返回URL之前没有经过整个条件语句。
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout,
});
// request url from user in command prompt
const requestSiteURL = () => {
return new Promise((resolve, reject) => {
readline.question('Please type url: ', async (url) => {
if (validUrl.isUri(url)) {
readline.close();
resolve(url);
// if user types no, then use base url
} else if ('No' || 'no' || 'NO') {
url = URL;
resolve(url);
} else {
reject(
console.log(
'Please type in a valid URL or type "no" to use base url.'
)
);
requestSiteURL();
}
});
});
};
// grabs all urls from original link and returns array
const getURLS = async () => {
let url = await requestSiteURL();
url = deleteFowardSlash(url);
try {
const res = await axios.get(url);
const data = res.data;
const $ = cheerio.load(data);
const urlQueue = [];
// finds all absolute links and pushs to urlQueue array
$("a[href^='http']").each((i, elem) => {
let link = $(elem).attr('href');
//checks to make sure link isnt any duplicate links in urlqueue array
link = deleteFowardSlash(link);
uniqueLinkChecker(link, urlQueue);
});
return urlQueue;
} catch (err) {
console.error(err);
return response.status(400).send(err);
}
};
我认为这是句法的问题。在这里,我将原来的行切换到正确使用Promise构造函数。许诺mdn
// request url from user in command prompt
const requestSiteURL = () => {
return new Promise((resolve, reject) => {
readline.question('Please type url: ', async (url) => {
if (validUrl.isUri(url)) {
readline.close();
resolve(url);
// if user types no, then use base url
} else if (url.toLowerCase() === 'no') {
url = URL;
resolve(url);
} else {
console.log(
'Please type in a valid URL or type "no" to use base url.'
)
requestSiteURL().then(resolve);
}
});
});
};
编辑:添加异步/等待版本。基本上,我认为你不必拒绝。我编辑了上面的不拒绝以及。另外,我假设url
是默认url(这与全局url命名空间冲突,仅供记录)
// request url from user in command prompt
const requestSiteURL = async function () {
const url = await new Promise(resolve => {
readline.question('Please type url: ', resolve)
})
if (validUrl.isUri(url)) {
readline.close()
return url
} else if (url.toLowerCase() === 'no') {
return URL
} else {
console.log('Please type in a valid URL or type "no" to use base url.')
return requestSiteURL()
}
}
问题内容: 我无法弄清楚/的运作方式。我对此有些了解,但无法使其正常工作。 我知道我可以使用,但是如果这样做,我知道我永远不会理解/ 我只会埋葬这个问题。 目标:调用并返回文件的内容。 每次调用该文件都会增加一次(每页加载)。该文件包含二进制缓冲区的转储,并存储在SSD中。 无论我做什么,都会出现错误或在控制台中。 问题答案: 要使用/,您需要返回承诺的方法。没有包装器,核心API函数就不会这样做
我找到了Polly包,它被设置为在C#中处理try/catch重试。我目前的代码设置如下: 我的方法只是在主线程的当前页面上显示一个: 当我调试这个并切断我的internet连接时。从不显示。发生两件事之一: null 更新: 在将对的调用放到方法中之后,我现在找到了绕过的方法。然而,现在我又有了一个问题。 一旦我断开与internet的连接,就会像应该的那样弹出。程序在完成函数之前等待我单击重试
问题内容: 我喜欢Typescript等中提供的新功能的平坦性。但是,我不确定我是否必须在块的外部声明要输入的变量以便以后使用,这一点我不确定。像这样: 如果我错了,请纠正我,但是似乎最好的做法是不要在主体中放置多行业务逻辑,因此,我只剩下在块外声明,在块中分配,以及然后使用它。 在这种情况下,最佳做法是什么? 问题答案: 似乎最好的做法是不要在try主体中放置多行业务逻辑 其实我会说是的。通常,
我已经复习了/,在复习了几篇文章之后,我决定自己测试一下。然而,我似乎无法理解为什么这不起作用: 控制台输出以下内容(节点V8.6.0): >外:“对象承诺” >内部:嘿那里 为什么函数内部的日志消息会在之后执行?我认为创建/的原因是为了使用异步任务执行同步执行。 有没有一种方法可以使用函数内部返回的值,而不用后面的?
问题内容: 我尝试创建一个计算器,但由于不知道如何获得用户输入而无法使它工作。 如何获得Java中的用户输入? 问题答案: 你可以根据要求使用以下任何选项。 Scanner class BufferedReader and InputStreamReader classes DataInputStream class 该类中的方法已被弃用。若要获取值,应将先前的解决方案与一起使用 Console
问题内容: 我正在尝试创建一个基本菜单,以检查输入的变量是否与定义的变量匹配。如果定义了变量,则获取已定义变量的数据。 例。 我输入 应该相等 问题答案: 这似乎是您要找的东西: 但是,这可能不是最好的策略,因为错字或恶意用户很容易使您的代码崩溃,系统过载或执行他们喜欢的任何其他讨厌的事情。对于这种特殊情况,更好的方法可能是