[当使用promise [closed]时链功能不起作用

问题描述 投票:0回答:1

var GoodMan = function(str){
    var callback_f = new Object;
    str1 = "I am " + str;
    console.log(str1);
    callback_f.rest = async function(num){
        await sleep(num * 1000);
        console.log("Start learning after " + num + " seconds");
        return callback_f;
    };
    callback_f.learn = function(str){
        str2 = "Leaning " + str;
        console.log(str2);
    }
    return callback_f;
}

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

GoodMan("Tom").rest(10).learn("computer");

错误输出:未捕获的TypeError:无法读取未定义的属性“学习”,位置为:1:24

这是一个面试问题。我无法自己解决此问题。

以下问题:

创建函数GoodMan

GoodMan(“汤姆”)

输出:我是汤姆

GoodMan(“ Tom”)。rest(10).learn(“ computer”)

输出:

我是汤姆

//等待10秒

10秒后开始学习

学习计算机

GoodMan(“ Tom”)。restFirst(5).learn(“ english”)

输出

//等待5秒

5秒后开始学习

我是汤姆

学习英语


根据面试题的要求:GoodMan(“ Tom”)。rest(10).learn(“ computer”)

还有其他方法可以使该过程在Javascript中睡眠10秒吗?

javascript promise sleep
1个回答
0
投票

基于@Jaromanda X的正确解释,代码应类似于:

var GoodMan = function(str){
    var callback_f = new Object;
    str1 = "I am " + str;
    console.log(str1);
    callback_f.rest = async function(num){
        await sleep(num * 1000);
        console.log("Start learning after " + num + " seconds");
        return callback_f;
    };
    callback_f.learn = function(str){
        str2 = "Leaning " + str;
        console.log(str2);
    }
    return callback_f;
}

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

GoodMan("Tom").rest(10).then((cbf)=>cbf.learn("computer"));
© www.soinside.com 2019 - 2024. All rights reserved.