如何在setTimeout里返回一个Promise?
好比有个方法check的返回值是个promise
const check = (rule, value) => { if (!value) {
return Promise.reject('不能为空')
}
}
如何在setTimeout里执行这个方法并且返回值是promise?
比如。。setTimeout(() => {
return check(...rest)
})
回答:
没办法。但是你可以直接返回 Promise 呀。
return new Promise(function(resolve){ setTimeout(() => {
resolve(check(...rest))
})
})
回答:
setTimeout 是不 care 它的 callback 返回值的,也没地方去处理这个返回值。一般想使用这个值,都会采用 callback 设计模式,举个例来说
300 毫秒之后会产生一个随机值,把这个随机值显示出来(为简写代码用 jQuery)
function generateRandomAfterMilliseconds(cb, timeout = 300) { setTimeout(() => cb(Math.random(), timeout);
}
function doBusiness() {
generateRandomAfterMilliseconds((v) => {
$("div.random").text(v);
});
}
在有了 Promise 之后,这个过程可以封装成 Promise(注意,是把 setTimeout 封装成 Promise,而不是在 setTimeout 里返回 Promise)。Promise 的作用就是封装异步操作。
function generateRandomAfterMilliseconds(timeout = 300) { return new Promise(resolve => {
setTimeout(() => resolve(Math.random()), timeout);
});
}
function doBusiness() {
generateRandomAfterMilliseconds().then(v => $("div.random").text(v));
}
说白了,还是使用的回调的形式。如果想写成平时习惯的同步代码的形式(注意,只是形式),需要使用 await 语法
async function doBusiness() { const v = await generateRandomAfterMilliseconds();
$("div.random").text(v);
}
也许这就是你期望的调用方式,是由 async/await 语法提供的,详情参阅:理解 JavaScript 的 async/await
更多关于异步处理的文章在这里。
回答:
1、setTimeout
方法固定返回一个数字timer
,取消定时器时就可以clearTimeout(timer)
,setTimeout
并不会处理其参数方法的返回值
2、针对你上面的需求,只能单独赋值了
let pro = null;setTimeout(() => {
pro = check(...rest)
})
回答:
不行。
你的需求是想等待一段时间再返回值?
是的话可以这样async 函数
function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)) }async function foo() {
await sleep(1000)
return 1
}
async function main() {
const result = await foo()
}
以上是 如何在setTimeout里返回一个Promise? 的全部内容, 来源链接: utcz.com/p/937337.html