如何在setTimeout里返回一个Promise?

如何在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

回到顶部