首页 > 试题广场 >

公司放映系统最近要上线一个『预定随机推荐电影』功能,每天用户

[问答题]
公司放映系统最近要上线一个『预定随机推荐电影』功能,每天用户通过系统预定名额,由系统每日推荐一部电影,按时推送到用户。现在,在系统已有如下异步方法封装的前提下
    getTodayUsers ( callback ): 获取今日预定的用户id列表,使用如下 `getTodyUsers(userIds=>{ console.log(userIds )})`, 即回调中拿到用户id列表
    getTodayMovie(callback): 获取今日推荐的电影id, 使用如下 `getTodayMovie( movieId=> {console.log(movieId )})` ,即回调中拿到今日的电影id
    bookMovieForUsers(userIds, movieId, callback): 使用用户id列表预定某部电影,使用如下bookMovieForUsers([1,2,3], 1000, ()=>{console.log(‘预定成功了')})
请封装一个bookTodayMovieForTodayUser()的方法,它的作用是为今天预定的用户订阅今天系统推荐的电影。它返回一个promise, 这个promise在请求后被resolve. 使用方式如下
bookTodayMovieForTodayUser().then( ()=> console.log('预定成功’) )
注: 简单起见,所有情况都不需要考虑失败情况
若传递给 Promise.all() 的任意 Promise 被拒绝了, 那么方法所返回的 Promise 就会立刻被拒绝,而不必等待其他的 Promise 结束。
Spread operator 将数组转为用逗号分隔的参数序列 ,Rest操作符和Spread操作都是用三个点(...)表示,但作用整好相反 

发表于 2018-07-07 17:29:07 回复(0)
更多回答
function bookTodayMovieForTodayUser() {
    let u = new Promise((resolve, reject) => {
        getTodyUsers(userIds => {
            resolve(userIds)
        })
    })
    let m = new Promise((resolve, reject) => {
        getTodayMovie(movieId => {
            resolve(movieId)
        })
    })
    return Promise.all([u, p]).then((result) => {
        bookMovieForUsers(...result, resolve);
    })
}
编辑于 2018-07-07 00:52:20 回复(0)
function bookMovieForUsers() {
var a = new Promise((resolve, reject) => {
getTodayUsers(userId => {
resolve(userId);
})
});
var b = new Promise((resolve, reject) => {
getTodayMovie(movieId => {
resolve(movieId);
})
});
Promise.all([a, b]).then(function(res) {
bookMovieForUsers(res[0], res[1], resolve);
})
}
发表于 2018-09-11 16:41:26 回复(0)
function bookTodayMovieForTodayUser(){
    return new Promise((resolve, reject) => {
        getTodayUsers(userIds => {
            resolve(userIds)
        })
    }).then(values => {
        return new Promise((resolve, reject) => {
            getTodayMovie(movieId => {
                resolve({userIds: values,movieId: movieId})
            })
        })
    }).then(values =>{
        return new Promise((resolve, reject) => {
            bookMovieForUsers(values.userIds, values.movieId, () => {
                              resolve("ok")
        })
    })
})
}

发表于 2020-08-07 11:48:43 回复(0)
function bookTodayMovieForTodayUser() {
  // step1
  let userIds = new Promise(function (resolve, reject) {
    getTodyUsers(userIds => {
      resolve(userIds)
    }
    )
  })
  //step2
  let movieIds = new Promise(function (resolve, reject) {
    getTodayMovie(movieId => {
      resolve(userIds)
    })
  })
  // step3——Promise.all()
  new Promise.all([userIds, movieIds]).then(function (results) {
    return new Promise(function (resolve, reject) {
      //  bookMovieForUsers(...results, function () {
      bookMovieForUsers(results[0], results[1], function () {
        resolve()
      })
    })
  })
}
发表于 2018-07-17 15:52:53 回复(0)
function bookTodayMovieForTodayUser() {
    return new Promise.all([
        new Promise(function(resolve, reject){
            getTodyUsers(userIds=>{ 
                if (userIds) {
                    console.log(userIds )
                    resolve(userIds)
                }}
            )
        }),
        new Promise(function(resolve, reject){
            getTodayMovie(movieId=>{ 
                if (userIds) {
                    console.log(userIds )
                    resolve(userIds)
                }
            })
        })
    ]).then(function(results){
        return new Promise(function(resolve, reject){
            bookMovieForUsers(results[0], results[1], function(){
                resolve()
            })
        })
    })
}
编辑于 2018-06-25 20:17:24 回复(0)

请教各位,这样写可行吗,代码运行了不会输出“预定成功”

function bookTodayMovieForTodayUser() {

    let u = new Promise((resolve, reject) => {
                function getTodayUsers(userIds){
                    console.log(userIds);
                }
            });

    let m = new Promise((resolve, reject) => {
                function getTodayMovie(movieId){
                    console.log(movieId);
                }
            });

    Promise.all([u, m]).then(
        function bookMovieForUsers(result, resolve){
            console.log("预定成功");
        }
    );
}
发表于 2018-08-28 21:55:55 回复(0)
function bookTodayMovieForTodayUser() {
  let promise1 = new Promise(resolve => {
    resolve(getTodayUsers())
  })
  let promise2 = new Promise(resolve => {
    resolve(getTodayMovie())
  })
  return Promise.all([promise1,promise2]).then(results => {
    bookMovieForUsers(results, () => {
     resolve()
    })
  })
}
function getTodayUsers() {
  return [1,2,3]
}
function getTodayMovie(){
  return 1000
}
function bookMovieForUsers(results,callback){
  console.log(results[0],results[1],"预定成功了")
}
bookTodayMovieForTodayUser().then(() => console.log('预定成功'));
发表于 2018-06-21 15:38:17 回复(0)
function bookTodayMovieForTodayUser() { getTodayUsers(userIds => { getTodayMovie( movieId => {
      return new Promise((resolve, reject) => { bookMovieForUsers(userIds, movieId, () => {
            resolve();
         }) });
    }) }) }

发表于 2018-06-11 23:54:58 回复(0)
function bookTodayMovieForTodayUser() {
let promise1 = new Promise(resolve => {
getTodayMovie((movieId) => {
resolve(movieId);
})
});
let promise2 = new Promise(resolve => {
getTodayUsers((userIds) => {
resolve(userIds);
})
});
return Promise.all([p1, p2], (movieId, userIds) => {
bookMovieForUsers(userIds, movieId, () => {
resolve();
})
})
}

bookTodayMovieForTodayUser().then(() => console.log('预定成功'));
编辑于 2018-06-07 17:52:57 回复(0)