2017-07-14 56 views
1

继续从这个question我有另一个关于如何实现registerTaskProviderprovideTasks方法的问题。无法从provideTasks函数添加任务

使用npm扩展作为example我试图实现一个基本功能,以简单地返回一个硬编码的任务。这将被扩展到实际解析文件,准备添加动态任务。但是,我一直无法得到这个工作。

我在努力的代码是:即使

vscode.workspace.findFiles('**/*.cake').then((files) => { 
     if (files.length === 0) { 
      return emptyTasks; 
     } 

     try { 
      const result: vscode.Task[] = []; 
      result.push(new vscode.Task({type: 'cake', script: 'NuGet-Restore'} as CakeTaskDefinition, 'Nuget-Restore', 'cake', new vscode.ShellExecution('npm install'), [])); 

      console.log(result); 
      return Promise.resolve(result); 
     } catch (e) { 
      return Promise.resolve(emptyTasks); 
     } 
    }); 

我可以看到,结果包含一个任务,我没有看到它在任务填充下拉列表。

任何人都可以提供任何帮助,为什么这是行不通的?

包含当前代码的存储库可以找到here

UPDATE

我刚编辑上面的代码如下所示:

try { 
     const result: vscode.Task[] = []; 
     result.push(new vscode.Task({ type: 'cake', script: 'NuGet-Restore' } as CakeTaskDefinition, 'Nuget-Restore', 'cake', new vscode.ShellExecution('npm install'), [])); 

     console.log(result); 
     return Promise.resolve(result); 
    } catch (e) { 
     return Promise.resolve(emptyTasks); 
    } 

通过不包括初始findFiles功能,它正确地填充与任务菜单单硬编码任务。为什么我不能从findFiles方法中返回?我现在怀疑这是一个TypeScript/JavaScript问题,而不是一个provideTasks函数,但我仍然在寻找一些帮助。

什么是我正在尝试做的建议方法?提前致谢!

回答

1

您需要returnfindFiles,以确保任务实际上是从任务提供者返回:

return vscode.workspace.findFiles('**/*.cake').then((files) => { 
    ... 
}); 

tsconfig.json -or使用"noImplicitReturns": true,甚至更好,"strict": true可以帮我我们抓虫子这样

+0

谢谢,那正是问题所在! –