Javascript 迟延承诺

Javascript 迟延承诺,javascript,closures,javascript-objects,es6-promise,Javascript,Closures,Javascript Objects,Es6 Promise,我有一个我似乎不知道如何解决的问题?编写一个函数,它接受一个值。此函数将返回一个承诺,该承诺将在2秒后解析。以下代码不应编辑,应使用promise对象 function promised (val) { } // UNCOMMENT THESE TO TEST YOUR WORK! const createPromise = promised('wait for it...'); createPromise.then((val) =&g

我有一个我似乎不知道如何解决的问题?编写一个函数,它接受一个值。此函数将返回一个承诺,该承诺将在2秒后解析。以下代码不应编辑,应使用promise对象

 function promised (val) {
     
    }
    
    // UNCOMMENT THESE TO TEST YOUR WORK!
     const createPromise = promised('wait for it...');
     createPromise.then((val) => console.log(val)); 
    // will log "wait for it..." to the console after 2 seconds
解释如下:

使用
setTimeout()
,这是一种内置方法,可在指定的毫秒数后调用函数或计算表达式。
setTimeout()
接受两个参数,第一个是回调函数,第二个是毫秒数。 1秒=1000ms,因此2秒=2000ms,依此类推

function promised (val) {
    // Create a new promise and resolve val after 2 seconds
    return new Promise(resolve => setTimeout(() => resolve(val), 2000)) //2000ms => 2 seconds
}



const createPromise = promised('wait for it...') // Pass in your message to promised function

createPromise
    .then(val => console.log(val))
    // Catch errors if any you don't need it here since we are always resolving the promise i just included it here so you know it's exist 
    .catch(err => console.log(err)) 
除非你百分之百确信承诺永远会解决问题,否则你应该始终使用.catch

例如:

function greeting(name) {

    return new Promise((resolve, reject) => setTimeout(() => {
        
        try {
            
            if (name.length <= 2) {
                throw new Error('Name must be more than two characters')
            }

        } catch (msg) {
            reject(msg)
        } 

        resolve(`Hello ${name}`)
        
        
    }, 2000))
}


greeting('ab')
    .then(res => console.log(res))
    .catch(err => console.log(err)) // Error: Name must be more than two characters

greeting('John')
    .then(res => console.log(res)) // Hello John
    .catch(err => console.log(err))

了解有关承诺的更多信息

问题在于,需要遵循这种特定的回答格式。请不要只发布代码作为回答,还要解释代码的作用以及如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。更新了解释,练习是在不更改提供的框架格式的情况下使用promise对象。@YahyaElfaqir您当然可以借助此答案中提供的代码和规范问题来填写框架。@Markrottveel我认为代码已经足够清楚了,但我现在已经包含了解释
function greeting(name) {

    return new Promise((resolve, reject) => setTimeout(() => {
        
        try {
            
            if (name.length <= 2) {
                throw new Error('Name must be more than two characters')
            }

        } catch (msg) {
            reject(msg)
        } 

        resolve(`Hello ${name}`)
        
        
    }, 2000))
}


greeting('ab')
    .then(res => console.log(res))
    .catch(err => console.log(err)) // Error: Name must be more than two characters

greeting('John')
    .then(res => console.log(res)) // Hello John
    .catch(err => console.log(err))
const greetSomeone = async (name) => {

    try {

        // Note that you can't use await outside an async function
        const msg = await greeting(name) 
        console.log(msg)

    } catch (err) {
        console.log(err)
    }
}



greetSomeone('ac') // Error: Name must be more than two characters

greetSomeone('Michael') // Hello Michael