javascript - 如何返回 promise ?

标签 javascript typescript promise es6-promise

我有一个函数

parseJobs(userId: string) {
    this.getLikedJobs(userId).subscribe(result => {
        result.map(key =>{
            let rows = {
                name : (key as any).jobsUser.firstName,
                jobType: 'Liked'
            }
            let job = {...rows,...(key as any).jobPosting};
            this.result.push(job);
        });
    });

    this.getSavedJobs(userId).subscribe(result => {
        result.map(key =>{
            let rows = {
                name : (key as any).jobsUser.firstName,
                jobType: 'Saved'
            }
            let job = {...rows,...(key as any).jobPosting};
            this.result.push(job);
        });
    });
    return this.result;
}

如何将结果返回给promise,我尽力了,但我不知道该怎么做,也许是因为我里面有两个可观察的,

最佳答案

您将 Promisify 两个可观察量,然后使用 Promise.all 来获得在所有操作完成后实现的 Promise:

parseJobs(userId: string) {
    // Create a promise
    const p1 = new Promise(resolve => {
        this.getLikedJobs(userId).subscribe(result => {
            // Resolve with the modified array
            resolve(result.map(key =>{
                let rows = {
                    name : (key as any).jobsUser.firstName,
                    jobType: 'Liked'
                }
                let job = {...rows,...(key as any).jobPosting};
                // In a map, you want to return:
                return job;
            }));
        });
    });
    // Same here:
    const p2 = new Promise(resolve => {
        this.getSavedJobs(userId).subscribe(result => {
            resolve(result.map(key =>{
                let rows = {
                    name : (key as any).jobsUser.firstName,
                    jobType: 'Saved'
                }
                let job = {...rows,...(key as any).jobPosting};
                return job;
            }));
        });
    });
    // Return a promise that will fulfill when both promises fulfill
    //    and concatenate the results
    return Promise.all([p1, p2]).then(result => [].concat(...result));
}

现在,您不再将结果存储在 this.result 中,而是将其设为 promise 值,如下所示:

parseJobs(1).then(result =>
    console.log(result);
});

您当然仍然可以将结果存储在 this.result 中,但这不是最佳实践,因为它表明一段代码可能会在它可用之前尝试访问它:您会始终使用 then 方法获取结果。

关于javascript - 如何返回 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46193304/

相关文章:

javascript - 为什么我的路线没有加载我的 React 组件?

typescript - 有什么方法可以在 typescript 中保存和使用此上下文吗?

javascript - 指令不能用作 Angular 2 中的入口组件

jQuery.Deferred()/GWT 中的 Promises 功能?

javascript - 循环使用本地 promise ;

javascript - 没有问题的解析错误

javascript - 如何从 Shiny 的 DT 中的单选按钮(使用 JS 回调制作)访问用户输入,并在一个 DT 中有不同的 JS 元素?

javascript - 如何使用 javascript 或 css 选择特定图像

javascript - 在C#中序列化为JSON并在TS中反序列化

TypeScript:将拒绝的 promise 作为参数传递