2017-07-14 59 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

謝謝,那正是問題所在! –